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

2

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

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

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

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

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

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

Спасибо!

Теги:
security
asp.net-mvc
attributes
membership-provider

2 ответа

4
Лучший ответ

Если я правильно понял ваш вопрос, вы хотите мягко закодировать значение "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

  • 0
    @AndreMiranda - Как администратор назначает ПРАВА на роли? Т.е. что делает динамически создаваемую роль SuperAdmin особенной? Где-то вам нужно хранить сопоставление ролей с разрешениями - будь то редактирование страницы, размещение формы или просто доступ к странице. Как вы разрешаете администратору определять их?
1

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

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

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

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

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

Помогает ли это/имеет смысл?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню