使用ASP.NET标识实现权限

我们目前正在使用ASP.NET Identity来处理较小的ASP.NET MVC 5应用程序。 它使我们能够维护不同的项目和他们的任务。 我们最近实施了基本认证,因此我们能够在我们的网站上注册用户并与他们一起登录。

我们希望能够在项目的基础上管理访问权限,因此我们可以为每个用户说明他已经阅读,写入,管理或没有指定项目的权限。

我的第一个想法是,我们可以在我们的数据库中创建一个存储用户权限的简单新表。 但是我觉得可能有一种内置的方式来通过ASP.NET身份来实现这一点。

所以我的问题确实是,我们应该遵循的路径 - 手动构建一个新表来管理权限或使用由ASP.NET Identity提供的内置内容。


使用ASP.NET Identity提供的内置内容

您可以使用的唯一的东西是声明或角色,并且两者都不是为您想要的IMO而构建的。

所以我会用你自己的表格将项目链接到用户,例如:

public class UserProjectRights
{
    [Key]
    public ApplicationUser User { get; set; }
    [Key]
    public Project Project { get; set; }

    public AccessRight Right { get; set; }
}

然后,无论何时您需要采取一些必要特定权利的行动,您都需要检查。 有几种方法可以做到这一点。 在我的应用程序中,我创建了如下所示的“访问权限检查扩展”(我为所有“访问权限实体”定义了一个通用接口,以“重用”该方法):

public static bool? CanView(this ApplicationUser user, Project project)
{
     var userRight = project.Rights.FirstOrDefault(r => r.User == user);
     return userRight == null ? (bool?)null : userRight.Right.HasFlag(AccessRight.View);
}

假设AccessRight是一个枚举类似于:

[Flags]
public enum AccessRight
{
    View,
    Edit,
    Admin
}

然后你可以在你的逻辑中做如下的事情:

if (user.CanView(project) == true)
{
    // show project
}

我用bool? 所以我可以实现不同的“默认行为”,因为我知道如果返回null没有权限定义。

链接地址: http://www.djcxy.com/p/24103.html

上一篇: Implementing rights with ASP.NET Identity

下一篇: signed SSL cert for localhost, how to make trusted