扩展 Asp.Net Identity IsInRole() 方法

Extending Asp.Net Identity IsInRole() Method

在我们的项目管理应用程序中,我们需要在单独的 table 数据库中保留访问权限(每个用户的每个项目)。 IE。

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

中的任务

为了成功,我们通过添加一个新的列(projectID)来扩展我们的 AspNetUserRoles table。

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

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

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

在网上做了一些研究,但找不到任何解决方案。

您可以创建一个 extension method,扩展用户 class。

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);