В ASP.NET, что использовать для управления ролями и разрешениями, назначенными ролям? - PullRequest
2 голосов
/ 05 октября 2009

Я работаю над веб-приложением ASP.NET. У меня есть эта хорошо известная проблема: каждый пользователь может принадлежать к одной или нескольким ролям (администратор, общедоступные пользователи), и каждая роль может иметь одно или несколько разрешений (можно редактировать, удалять, загружать и т. Д.) И наоборот. Я хочу сделать что-то вроде этого: [http://demo.sitefinity.com/Sitefinity/Admin/Modules.aspx?route=GenericControlPanel.PermissionsView`1].

Я нашел эти варианты для реализации этого:

  • с использованием NetSqlAzMan (но я не уверен, что оно будет работать с нашим приложением, поскольку наши пользователи не хранятся в той же базе данных, что и приложение, и поскольку мы используем проверку подлинности с помощью форм)
  • Реализация моих собственных классов, которые позволяют мне делать: User.HasPermission / AddPermissionToUser / и т.д.
  • с использованием двух поставщиков ролей: один для управления ролями, другой для управления разрешениями, зная, что эти поставщики будут «связаны» из-за отношения m: n между ролями и разрешениями.
  • Я сейчас использую настраиваемый поставщик ролей, поэтому другой вариант - добавить методы управления разрешениями для этого поставщика.

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

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 07 октября 2009

Если вы найдете хорошее упакованное решение для модуля разрешений, я бы хотел увидеть его:)

Вообще говоря, встроенные поставщики безопасности останавливаются после части «идентификация» и «авторизация». После определения и авторизации для доступа к приложению вам нужно будет более точно настроить права доступа к страницам или функциям.

Уровень разрешений, который вы описываете, на самом деле достаточно продвинутый для реализации. Он отражает списки контроля доступа (ACL) в Windows. Хотя это кажется довольно простым, на самом деле его довольно сложно кодировать. Как только вы приступаете к его проектированию, вы обнаруживаете, что вам необходимо реализовать разрешение «запретить» переопределение, обрабатывать слияния разрешений многоуровневой группы, а затем иметь дело со «специальными» разрешениями и тому подобным. Затем вы сталкиваетесь с тем, что «разрешения на редактирование тоже подразумевают представление, и что мне делать, если у них нет вида, но есть надстройка»?

Это может быть настоящий беспорядок.

Прежде чем приступить к реализации разрешений на этом уровне сложности, я настоятельно рекомендую вам сделать шаг назад и посмотреть, сможете ли вы немного сгладить ваши разрешения и модель ролей / групп. Разве вы не можете просто сойти с того, что ваши роли БУДУТ разрешать? Например, роль для людей, которые могут редактировать, роль для людей, которые могут добавлять, роль для людей, которые могут просматривать ... и т. Д.

В большинстве приложений вам не требуется полная ACL-подобия гранулярности в системе разрешений.

После того как вы определили соответствующий уровень разрешений, в котором действительно нуждается ваше приложение, вам лучше всего развернуть набор пользовательских объектов для управления этими разрешениями. Я должен сказать, что никогда раньше не рассматривал возможность использования второго связанного поставщика ролей в качестве менеджера разрешений ... на самом деле это довольно блестящая идея. Но я все еще советую против этого. Поставщик ролей не был разработан для того, что вы пытаетесь сделать, и вам, вероятно, придется расширить и переопределить поведение по умолчанию настолько, что было бы проще и удобнее обслуживать, если бы вы использовали пользовательскую реализацию с нуля.

2 голосов
/ 25 января 2010

Вот инструмент, который сочетает в себе проверку подлинности + разрешения и роли + ведение журнала и аудит http://visual -guard.com /

Аутентификация может быть Windows, в этом случае она реализует единый вход или комбинация имени пользователя и пароля

2 консоли доступны для управления пользователями и разрешениями - Один из них более ориентирован на разработчиков и предоставляет мастер для определения прав без кодирования (для .Net), функций развертывания и управления версиями. - Другой ориентирован на веб-пользователей, не ориентированных на технических пользователей, и ориентирован на учетные записи пользователей, группы и их сопоставление с ролями.

Разрешения могут быть чрезвычайно мелкозернистыми при каких-либо условиях (эта форма видна роли «врачи» с 8 до 11 утра, потому что она связана с лекарствами, которые нужно давать только утром)

Изначально он был ориентирован только на .Net, и теперь они поддерживают другие технологии, такие как Java, Delphi C ++, в основном любые технологии, способные вызывать веб-сервисы.

...