Node.js и ACL

Я выбрал для своего проекта Node.js + Express + Mongoose . До сих пор мне не нужно было использовать ACL , но на этом этапе проекта мне нужно реализовать это.

НПМ содержит несколько модулей, но какой из них выбрать?

Расскажите, пожалуйста, ваш опыт работы с ACL (Node.js + Express + Mongoose). И если вы знаете какой-либо учебник, было бы здорово :), но это не так уж и необходимо, что я точно должен знать, что программисты Node.js используют для ACL.

Последняя возможность - написать собственное acl-middleware, это может быть интересным для меня. Я полагаю :)

18
добавлено
Просмотры: 2
nl ja de
Вы также можете попробовать Casbin: github.com/casbin/node-casbin . Он поддерживает несколько моделей управления доступом, включая ACL, RBAC, ABAC и т. Д. Я думаю, что он более мощный и гибкий, чем текущий модуль acl.
добавлено автор Yang Luo, источник

1 ответы

https://npmjs.org/package/acl

Наиболее используемый модуль ACL. Он имеет специальное промежуточное ПО для защиты ресурсов и поддержки mongo.

20
добавлено
@EricOlson ссылается на npmjs.com/package/graph-acl , для тех, кто приходит здесь от Google.
добавлено автор Gajus, источник
Я также создал собственную реализацию с использованием MySQL. Удивительно, но в NPM нет пакета для этого.
добавлено автор Gajus, источник
Кто-нибудь проверял это на производительность? Интересно, насколько эффективно это написано.
добавлено автор Eric Olson, источник
Чтобы ответить на мой собственный комментарий: Asserts молниеносно! Но при запросе всех разрешений, которые пользователь имеет на ресурсе, это заняло около 12 секунд на небольшом наборе данных (сотни пользователей и тысячи ресурсов). Я попробовал Neo4j, и он вернется через ~ 100 миллисекунд в наборе данных на 10 раз больше для той же операции.
добавлено автор Eric Olson, источник
На самом деле, @GajusKuizinas, я использовал собственную реализацию acl на Neo4j. Я даже не знал, что пакет с использованием графиков уже существует. У NPM есть все ... Я должен был знать :)
добавлено автор Eric Olson, источник
@Interactionist, я провел обширное тестирование с ACL-реализациями над MySQL, используя MPTT (измененный трассировка дерева предзаказов), MongoDB, собственную библиотеку ACL JCR и другие. Никакая реализация не приблизилась к производительности по сравнению с графиком dbs. В конце концов я перешел с Titan в конце для масштабируемости. Пропускная способность для Neo4j и Titan составляла около 3000 ACL-утверждений/сек. Например, JCR составляла около 400/сек. MySQL с MPTT был ~ 1800/сек, но запрос был сумасшедшим - огромным и сложным. Удачи!
добавлено автор Eric Olson, источник
@Interactionist Чтобы дать вам представление о моем подходе, см. этот вопрос SO , который я задал в начале моего обучения графу. Это пример базовой модели. Утверждения становятся проблемой графа DAG. У меня есть деревья и деревья ресурсов. Они связаны с краями разрешений. Вы можете видеть, что Линда может прочитать ресурс eVar33 (благодаря членству в группе Media Mgmt), потому что есть путь от Linda к eVar33, где край разрешения содержит read: true. Я считаю, что графики являются естественным подходом для ACL.
добавлено автор Eric Olson, источник
Привет @EricOlson: Я в настоящее время защищаю свой API с помощью JWT и паспорта, используя стратегию Bearer. Я хотел бы расширить уровень доступа к ресурсам с помощью ACL. Вы порекомендовали бы ваш подход (графики и acl)?
добавлено автор wittgenstein, источник
@EricOlson Спасибо за подробное описание. Меня все еще интересует, что ваш подход - это то, что может/должно идти параллельно нормальному паспорту jwt auth/express для API-маршрутизации. Очень заинтересованы в том, чтобы задуматься над этим. Благодарю.
добавлено автор wittgenstein, источник
@EricOlson Приветствует человека. Отличный пример кстати. «Я считаю, что графики - естественный подход для ACL». Да, именно поэтому я очень хочу получить квалифицированный ответ, если этот график-ACL может сопровождать мой API-интерфейс маршрутизации/авторизации с помощью express/passport/jwt. Эта часть действительно важна, прежде чем я углубится в графики. И я ценю ваш ответ на этот вопрос.
добавлено автор wittgenstein, источник
Спасибо за Ваш ответ! Я попробую!
добавлено автор otodockal, источник