2011-02-09 2 views
1

У меня есть часть аутентификации веб-приложения ASP.NET 3.5. Я хотел бы узнать больше об общих шаблонах авторизации.Как обрабатывать авторизацию в приложении?

Могу ли я представить свою текущую структуру авторизации:

У меня есть база данных с «Модуль» и таблицы «Операция». Модули представляют системы в приложении и Операции представляют действия, которые можно выполнять в системе.

Заказчик, заказ, выставление счетов будет определяться как модуль. «Операция» связана с модулем: Customer.Add, Customer.Delete - это операции с клиентами.

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

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


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

Как и когда я должен защищать модуль и проверить авторизацию пользователя для выполнения операции над указанным модулем?

Я не выполнил этого, но вот один из способов я подумал:

  1. Пользователь нажимает на операции: Модуль: Клиенты | Операция: Добавить
  2. В событии click я смотрю на роль пользователя, я проверяю, что пользователь может выполнить операцию, затем я запускаю операцию или направляет пользователя соответственно.


Пожалуйста, простите неясный характер этого вопроса. Я не уверен, что спросить здесь.

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

Есть много вариантов для меня здесь, и возможности кажутся бесконечными. Пожалуйста, дайте мне знать, есть ли какие-либо модели или шаблоны, которые я могу посмотреть, чтобы разрешить авторизацию внутри приложения.

+0

Я думаю, что хорошим местом для начала является, вероятно, стандартная система asp.net - членский провайдер, roleprovider и т. Д. Они имеют довольно общую стандартную схему, которая станет отличным местом для начала работы. http://www.4guysfromrolla.com/articles/120705-1.aspx – Prescott

ответ

1

Если вы хотите, чтобы это было так, то начинайте с малого.

Первый реализует функциональность вдоль линий public bool User.HasRightsFor(Module m, Action a) с перегрузками. Он может быть даже статическим, потому что вы можете получить текущего пользователя из системы.

Затем вы можете просто спросить, имеет ли пользователь право на текущее действие/модуль/что-то еще и действовать соответствующим образом.

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

Вы можете легко интегрировать такую ​​систему с (например,) ASP.NET Role-Based Authorization.

0

Вы посмотрели Microsoft-s AzMan-Authorization Manager?

Он содержит API для программирования, чтобы запросить операции и gui (azman.msc), где вы можете определить роли и права на карту и сохранить их в XML-файле.

Таким образом, вместо определения модуля + операции («Клиент» плюс «Добавить») в приближении к вы можете определить AzMan-операции «CustomerAdd.

0

Я знаю, что мой ответ будет поздно пришельцем, но я бы просто чтобы указать, что в сценариях, где вам нужны динамические требования к управлению доступом, такие как те, которые вы описали с несколькими атрибутами/параметрами, вы хотите рассмотреть управление доступом на основе атрибутов (ABAC) и расширяемый язык разметки доступа (XACML) который реализует ДКС

Вы можете прочитать больше как на этих ссылочных сайтах:.

С XACML вы можете определить политику, такие как:

  • клиент может оплатить счет, они владеют
  • клиент может просматривать счета они назначены и счета, присвоенные к людям, за которые они несут ответственность (например, дети)
  • Представитель клиента может управлять векселями в регионе, которому назначен представитель
  • ...
Смежные вопросы