Asp.net MVC - Как я могу получить роли пользователя, не зная этих ролей? - PullRequest
2 голосов
/ 07 октября 2009

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

Таким образом, администратор создаст группу пользователей с именем «SuperAdmin» и выберет в раскрывающемся списке пользователей, которые будут входить в эту группу.

Ранее я работал над решением с использованием RoleProvider и Attibutes контроллера, но в этом случае я создал все группы и вручную установил их в контроллере, например:

[Access(Roles = "SuperAdmin")]
public UserController : Controller
{
}

В приведенном выше примере я знаю, что группа называется «SuperAdmin». Но теперь, в этом новом проекте, я не знаю, какие группы создаст пользователь-администратор.

Так как я могу получить все роли, к которым пользователю будет разрешен динамический доступ?

Спасибо!

Ответы [ 2 ]

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

Если я правильно понимаю ваш вопрос, вы хотите ввести софт-код значения "SuperAdmin".

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

Если вы все еще хотите сделать это с атрибутом, вы можете создать собственный атрибут (моделирующий тот, который использует ASP.NET MVC), который ищет соответствующие разрешения из базы данных и принимает решение.

Или вы можете сделать это прямо в методе контроллера, используя что-то вроде этого:

Public ActionResult EditThing(int ID)
{
    ThingRepository repository = new ThingRepository();

    If (!repository.UserHasAccess(int ID))
       Return View("NotAuthorized")
    //
    // Do stuff here
}

См. Учебник NerdDinner , если вам нужна дополнительная информация о репозиториях.

Более подробная информация здесь: Безопасность на основе документов в ASP.NET MVC

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

Рассматривали ли вы написать свой собственный атрибут, которым вы можете украсить свое действие?

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

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

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

[MyAccessAttribute(Allow="SuperUser", "Admin")]
public ActionResult MyAction()

Это помогает / имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...