2011-02-03 2 views
3

У нас есть несколько проектов (ASP.NET MVC), для которых требуется модель безопасности Role/User/Permissions. Мы хотим сохранить эти данные в таблицах в нашей базе данных. Как сделать вашу рекомендацию, мы собираемся внедрить эту модель безопасности с помощью наших проектов ASP.NET MVC? Использовать настраиваемые атрибуты аутентификации, которые будут определять, разрешено ли пользователю, взаимодействуя с моделью данных в нашей базе данных?ASP.NET MVC Security Model/Database - Какие у меня варианты?

Есть ли доступны сторонние/с открытым исходным кодом?

+0

У вас возникли проблемы со встроенными поставщиками членства/авторизации? Если они не соответствуют законопроекту, вы можете реализовать свой собственный: http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx – mxmissile

+0

Поддерживает ли встроенные провайдеры разрешения? Например, пользователь может быть членом роли «Гость», который имеет разрешения «Чтение» и «Запись». Похоже, что встроенные провайдеры работают хорошо, когда используют роли для доступа к определенным папкам, контроллерам, методам, но я не вижу ничего, что проверяет, есть ли у них определенное разрешение. Я хочу иметь возможность написать «Если UserHasPermission (« Удалить »)», который автоматически определит, имеет ли их роль это разрешение. Я также не уверен, как добавлять разрешения с помощью своего инструмента администрирования. – Jeff

ответ

0

Я использую Rhino Security для сложного сайта MVC и люблю его.

http://ayende.com/Blog/archive/2008/01/22/Rhino-Security-Overview-Part-I.aspx

вызовы безопасности в конечном итоге выглядит так:

 permissionBuilderService 
       .Allow("/[Controller]", 1) 
       .For("GAAdmins", 1) 
       .OnEverything() 
       .DefaultLevel() 
       .Save(); 

authorizationRepository.AssociateUserWith(user, "GAAdmins"); 


if (authService.IsAllowed(user, "/[Controller]/[Action]")) 
...; 
1

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

Во-вторых, я создал базовый контроллер и добавил атрибут authorize на базовый контроллер, затем переопределяю «событие» авторизации и проверил там, если пользователь имеет доступ к этому конкретному действию, я сделал то же самое с onactionexecuting.

+0

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