MVC — уровни доступа в ролях

Нужен совет и руководство по уровням доступа в Ролях.

У меня есть проект MVC, который использует AspNetRoles, например, у меня настроены следующие роли: Admin CustomerIndex CustomerCreate

В моем клиентском контроллере у меня есть:

[Authorize(Roles = "Admin, CustomerIndex")]
public ActionResult Index() ....

[Authorize(Roles = "Admin, CustomerCreate")]
public ActionResult Create() ...

Что я хочу сделать, так это ограничить то, что пользователь может видеть и делать, в зависимости от его/ее уровня доступа в рамках роли.
Допустим, у меня есть следующие клиенты: ABC, DEF, XYZ.

Я хочу предоставить разным пользователям доступ на чтение для разных клиентов, то есть: User1 иметь роль CustomerIndex, но только просматривать данные для ABC, DEF, а затем User2, чтобы иметь роль CustomerIndex, но только для клиента XYZ, а затем аналогично для роли CustomerCreate.

Таким образом, если User1 перейдет на страницу клиента, ему будут представлены данные клиента только для ABC, DEF. Если пользователь 2 сделает то же самое, он увидит данные только для клиента XYZ.

Каков наилучший способ добиться чего-то подобного?


person Stuart    schedule 09.10.2014    source источник
comment
У вас здесь сложная ситуация, вы не можете добиться этого только ролевым подходом. Но вы можете создавать утверждения во время создания пользователей, а затем использовать разрешения на основе утверждений с вашими требованиями.   -  person DSR    schedule 10.10.2014


Ответы (1)


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

В вашем примере вам понадобится какое-то хранилище данных со столбцом «Пользователь» и столбцом «Клиент».

Пользователи Клиенты
Пользователь1 ABC
Пользователь1 DEF
Пользователь2 XYZ

Когда пользователь с ролью CustomerIndex запрашивает контроллер индекса, атрибут Authorize разрешает ему доступ, затем в самом контроллере вы запрашиваете свое хранилище данных и возвращаете всех клиентов для текущего пользователя и передаете это обратно в свое представление в модели. . То же самое касается контроллера Create.

person Matt Lassam-Jones    schedule 09.10.2014