2009-10-05 3 views
2

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

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

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

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

Спасибо заранее

+0

Первая пуля - вы можете использовать пользователей БД. –

ответ

4

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

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

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

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

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

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

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

+0

Этот http://www.portsight.com/Products.aspx?AliasPath=Products/Secure%20Access/Secure%20Access&CultureAlias=en-US кажется хорошим, как вы думаете? – jon

+0

Я только взглянул на документацию аппликации, и мне нравится идея. Для меня большая проблема в том, что это очень старый продукт. Я открыл новый релиз, а даты в большинстве файлов - 2004 или 2006 год. Документация отличная, но никогда не говорит о новых платформах. В нем рассказывается о сервере 2003, .NET 2.0 и SQL 2000. Поэтому моя большая забота заключается в том, что разработка продукта мертва. На верхнем уровне, однако, самый новый релиз с этого года даже думал, что файлы не новы, поэтому, возможно, он не мертв или его оживут. –

+0

Благодарим вас за полезные комментарии. Я закончил свою собственную реализацию. – jon

2

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

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

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

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

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