Я работаю над этим проектом, чтобы пользователь-администратор мог создать несколько групп пользователей, которые будут работать как роли проекта.
Итак, администратор создаст группу пользователей с именем "SuperAdmin" и выберет в раскрывающемся списке пользователей, которые будут частью этой группы.
Я работал раньше в решении с использованием RoleProvider и с помощью Controller Attibutes, но в этом случае я создал все группы и вручную установил в контроллере, например:
[Access(Roles = "SuperAdmin")]
public UserController : Controller
{
}
В приведенном выше примере я знаю, что группа называется SuperAdmin. Но теперь, в этом новом проекте, я не знаю, какие группы создаст пользователь admin.
Итак, как я могу получить все роли, которым пользователю будет разрешен доступ динамически?
Спасибо!
Если я правильно понял ваш вопрос, вы хотите мягко закодировать значение "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
Рассматривали ли вы свой собственный атрибут, который вы можете украсить своим действием?
В этом случае вы можете использовать этот атрибут, чтобы получить права доступа для пользователя, сопоставить это с таблицей доступа к странице, а затем вернуть результат и разрешить или запретить доступ к странице/действию.
Я думаю, вам нужно будет иметь таблицу, которая будет определять, на каких страницах роль имеет доступ, к которой может быть привязана ссылка на роли, которым назначен пользователь.
Или вы можете написать свой атрибут таким образом, чтобы он определял роли, разрешенные для просмотра страницы.
[MyAccessAttribute(Allow="SuperUser", "Admin")]
public ActionResult MyAction()
Помогает ли это/имеет смысл?