0

Я использую новейший и самый лучший Identity 3.x, который поставляется с MVC6 Core 1.0 при выборе «Индивидуальные учетные записи пользователей».ASP.NET Идентификация и создание RoleFunctions

Требования моего Идент.польз следующая:

Users -> AspNetUsers 
Roles -> AspNetRoles 
UserRoles -> AspNetUserRoles 
RoleFunctions -> I don't see a table for this in the Identity db structure 

RoleFunctions являются любые функции системы, такие как DeleteCustomers, AccessToCustomerPage и т.д.

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

+0

Я думаю, что вы имеете в виду ** ** политики. Думаю, у вас будет известное количество функций ролей, и они будут известны в вашем коде (если вы не нацеливаете какой-то динамизм)? Вы можете рассмотреть их жестко кодирование и создание политик, например. «Чтобы удалить клиента, пользователь должен иметь это, эту и/или эту роль». Посмотрите здесь: https://docs.asp.net/ru/latest/security/authorization/roles.html#policy-based-role-checks – regnauld

+0

Хорошо, так что вы говорите, если у меня есть куча глобальных констант для всех функции роли и использовать политики, которым мне не нужна таблица RoleFunctions? Дело в том, что мне нужно делать все мои проверки на уровне функции, а не на уровне ролей. Так, например: если текущий зарегистрированный пользователь является частью роли, которая включает DeleteCustomer, тогда отобразите trashbin в модели вида. –

ответ

0

Идентификация позволяет вам определить авторизацию на основе контроллера или определенное действие в контроллере.

авторизация потребует аутентификации до того, как это действие или контроллер могут быть посещены.

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

[Authorize(Roles="admin")] 
public void controllerMethod(param) {} 

Роли может принять список строки (например, «Роли =« Администратор »,« Менеджер »), поэтому вы можете назначить несколько ролей в одном заявлении на авторизацию.

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

[AllowAnonymous] 
public void nosecuritycontrolleraction {} 

Я надеюсь, что это то, что вы ищете, и вы можете найти лучшие гид здесь: http://www.asp.net/identity

UPDATE 1 Для примера DeleteCustomer я предполагаю, что у вас есть некоторые методы в контроллере, который обрабатывает удаление объекта клиента. Выше этих методов поставьте [Authorize (Roles = «CustomerAdmin»)], и только те пользователи с ролью customerAdmin в UserRoles могут использовать это действие.

нравится:

[Authorize(Roles="CustomerAdmin")] 
public ActionResult DeleteCustomer(string/int id){} 
+0

Это близко к тому, что я ищу. Можете ли вы обновить сообщение, чтобы разместить этот пример: существует роль CustomerAdmin. Где указать, какие функции может выполнять CustomerAdmin? Предположим, что они могут просматривать и удалять клиентов. Скажем, в ViewModel я хочу отображать только значок корзины для пользователей, которые имеют роль CustomerAdmin.Я бы скорее сделал чек, говоря, что если какая-либо роль, которую пользователь имеет, имеет функцию Удалить клиента, тогда отобразите корзину мусора. В этом и состоит моя роль RoleFunctions. –

+0

То, что я пытаюсь сказать выше, это то, что я предпочитаю выполнять все мои проверки на уровне функции, а не на уровне ролей. Так, например: если текущий зарегистрированный пользователь является частью роли, которая включает в себя жестко запрограммированную функцию DeleteCustomer, тогда отобразите корзину мусора в модели представления. Как вы собираетесь создать систему, которая это сделает? –

+0

Для примера DeleteCustomer я предполагаю, что у вас есть некоторые методы в контроллере, который обрабатывает удаление объекта клиента. Выше этих методов поставьте [Authorize (Roles = «CustomerAdmin»)], и только те пользователи с ролью customerAdmin в UserRoles могут использовать это действие. –

Смежные вопросы