Как лучше всего создать AngularJS ACL?

Хочу поделиться с вами (сообществом) своей проблемой.

Я использую стек MEAN, поэтому я использую Node.js с Express и AngularJS, и у меня есть приложение с одним приложением.

Я использую passport в качестве стратегии аутентификации в коде Node \ Express \ Jade. Я хочу создать раздел администратора на своей странице для управления пользователями и другими вещами.

Я также хочу защитить эти сайты AngularJS, загружаемые асинхронно, добавив некоторый контроль доступа к моему $routeProvider, например:

$routeProvider.when('/admin/users', {
    templateUrl: '/views/admin/users.html',
    auth: {
        required: true,
        roles: ['admin']
    }
})

Это всего лишь псевдокод, который я хочу получить в своем реальном решении. Если пользователь не вошел в систему, он должен быть перенаправлен на страницу /signin, а если пользователь вошел в систему и не имеет надлежащей роли для просмотра этой страницы, он должен быть перенаправлен на соответствующий вид с пользовательской информацией.


person mrzepinski    schedule 04.01.2014    source источник
comment
Вопрос и слишком широкий, и слишком самоуверенный.   -  person Stewie    schedule 05.01.2014


Ответы (2)


Я предпочитаю управлять доступом на стороне сервера и просто ничего не предоставлять пользователю, если он/она не сможет получить к нему доступ. Затем я обрабатываю и интерпретирую ответ сервера, чтобы выполнять такие действия, как перенаправление на форму входа.

Это позволяет использовать действительно гибкие механизмы безопасности. Например, я могу настроить свою внутреннюю безопасность с помощью брандмауэра для чего-то, что вы описали (где маршрут «/admin» и все его потомки должны быть защищены). Я могу использовать ACL для защиты отдельных объектов или SecurityManager, который позволяет проводить более сложный анализ пользователя, делающего запрос.

Возможно, это не прямой ответ на ваш вопрос, а поощрение к другому подходу к проблеме. Тем не менее, я думаю, что это лучший подход, чем все, что я видел с точки зрения чистого контроля доступа JS.

person dyelawn    schedule 04.01.2014
comment
Я +1, если вы включите разбивку вашей настройки, фрагменты кода и т. д.;) - person electblake; 27.09.2014

Взгляните на UI-Router: https://github.com/angular-ui/ui-router

Это довольно круто, и вы можете перехватывать изменения состояния на основе любой схемы безопасности, которую вы хотите.

Мы используем его со схемой безопасности на основе разрешений/ролей/групп, и это работает потрясающе.

person Sam    schedule 04.01.2014