扩展Asp.Net标识IsInRole()方法

时间:2016-01-26 18:43:34

标签: c# asp.net asp.net-mvc authentication asp.net-identity

在我们的项目管理应用程序中,我们需要在db的单独表中保留访问权限(每个用户的每个项目)。 IE浏览器。

用户A可以在项目#1中创建任务, 用户A只能读取Project#2中的任务

为了成功,我们通过添加新的coloumn(projectID)来扩展我们的AspNetUserRoles表。

默认情况下,在razor视图中,我们可以使用User.IsInRole("CanCreateTask")检查用户角色。我们需要扩展此方法,并希望检查特定项目的用户角色即。 User.IsInRole("CanCreateTask", project.Id)

已编辑:我还需要使用project.Id

检查控制器中的用户访问权限
[Authorize(Roles = "CanCreateTask")]

对网络进行了一些研究但找不到任何解决方案。

1 个答案:

答案 0 :(得分:4)

您可以创建extension method,扩展用户类。

public static bool IsInRole(this User user, string role, int projectID)
{
    var isInRole = user.IsInRole(role);
    var hasRoleInProject = // Logic for deciding if it is in the role for this project

    return isInRole && hasRoleInProject; 

}

这个方法会像这样调用:

user.IsInRole("CanCreateTask", project.Id);