ASP.NET标识和创建RoleFunction

时间:2016-04-15 13:33:45

标签: asp.net asp.net-mvc asp.net-identity asp.net-core-1.0 asp.net-identity-3

我在使用MVC6 Core 1.0时选择“个人用户帐户”时使用最新最好的Identity 3.x。

我的用户身份验证的要求如下:

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 Identity不支持基于角色的身份验证的额外步骤,因此我将不得不自己创建表和函数。这是真的还是一切都适合我,我只是没有看到它?

1 个答案:

答案 0 :(得分:0)

Identity允许您根据控制器或控制器中的特定操作确定授权。

[Authorize]
public void controllermethod(param) {}

authorize将需要进行身份验证才能访问此操作或控制器。

所以,如果你想创建一个只有管理员可以执行的动作(或者你创建的任何用户角色组),那么你应该把控制器方法放在

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

角色可以接受字符串列表,例如(角色="管理员","经理"),因此您可以将多个角色放在一个授权声明中。

您也可以在控制器级别执行此操作,强制控制器中的每个操作都遵守您的授权声明。基本上如果你把它放在控制器声明之上,每个动作都会受到影响,但是你可以用

将特定动作列入白名单
[AllowAnonymous]
public void nosecuritycontrolleraction {}

我希望这是你正在寻找的,你可以在这里找到更好的指南: http://www.asp.net/identity

更新1 对于DeleteCustomer示例,我假设您在控制器中有一些方法来处理客户对象的删除。在这些方法之上,放置[Authorize(Roles =" CustomerAdmin")],然后只有UserRoles中具有customerAdmin角色的用户才能使用该操作。

像:

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