C# ASP.NET Identity 2 (.NET Framework MVC) - 使用权限和角色

费德·安图纳

我正在尝试制作权限/角色授权应用程序。我的想法是混合角色和权限,以便管理员可以创建具有不同网络权限的不同角色来做一些事情。

例子,

我想在我的控制器中放入这样的东西:

namespace MyApp.Controllers
{
    public class SettingsController : Controller
    {
        // All the ASP.NET Identity UserManager, SignInManager
        and RoleManager configuration

       [HasPermission(Permission = "SensitiveData")]
       // GET: /Settings/SensitiveData
       public ActionResult SensitiveData()
       {
           // Collect some information to display
           return View()
       }

       [HasPermission(Permission = "ListUsers")]
       // GET: /Settings/ListUsers
       public ActionResult ListUsers()
       {
           // Collect some information to display
           return View()
       }
    }
}

我的想法是为 ASP.NET Identity“附带”的前五个表创建两个额外的表,一个称为 AspNetPermissions,另一个称为 AspNetRolePermissions

AspNetPermissions 将具有 Id 和 Permission 字段。AspNetRolePermissions 将具有 RoleId 和 PermissionId。

Admin 用户可以创建、编辑或删除角色。角色将成为对权限进行分组的友好方式。因此,例如,我希望允许维护角色下的所有用户使用我以前的控制器中的“SensitiveData”和“ListUsers”操作,而营销角色下的用户只允许使用“ListUsers”操作。我将从管理员帐户创建角色“维护”,将设置权限添加到“SensitiveData”和“ListUsers”。然后我会遵循相同的概念来创建角色“营销”,所以 de DBs 看起来像:

-------------------------------
       AspNetPermissions*
-------------------------------
Id             | Permission
---------------|---------------
permissionId1  | SensitiveData
permissionId2  | ListUsers
...            | ...

*这个是预加载的,连管理员都不能创建权限

-------------------------------
       AspNetRolePermissions
-------------------------------
RoleId         | PermissionId
---------------|---------------
maintenanceId  | permissionId1
maintenanceId  | permissionId2
marketingId    | permissionId2

最后,我会将角色添加到一些用户(我让它工作的那部分)。

我无法实现的是:

  1. 创建 AspNetPermissions 和 AspNetRolePermissions
  2. 创建 AspNetRolePermissions 与 AspNetPermissions 和 AspNetRoles 之间的关系
  3. 创建过滤器 HasPermission(Permission = "somepermission")
  4. 检查尝试访问的用户是否具有与 AspNetRolePermissions 中所需权限配对的角色

我需要一些帮助,我已经阅读了一整天,但找不到任何有用的东西,只有一些我无法满足我需要的东西。

我认为从这一点来看这是最好的方法,因为管理员用户可以创建一个角色,为该角色设置权限,然后将该角色添加到他或她想要的用户数量。如果我直接为用户设置权限,那么当我拥有的不仅仅是几个用户时,以后更难更改权限。


编辑


我设法做到了这一点:

在 IdentityModel.cs 上,我以这种方式添加了 ApplicationRole 和 UserPermission 并编辑了 ApplicationDbContext:

public class ApplicationRole : IdentityRole
{
    public ApplicationRole()
    {
    }

    public ApplicationRole(string name)
        : base(name)
    {
    }

    //

    public virtual ICollection<UserPermission> Permissions { get; private set; }
}

public class UserPermission
{
    public string Id { get; set; } = Guid.NewGuid().ToString();
    public string Permission { get; set; }
    public virtual ICollection<ApplicationRole> Roles { get; private set; }

}

public class UserRolePermissions
{
    public string RoleId { get; set; }
    public string PermissionId { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    const string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;Database=LocalTestingDB;trusted_connection=yes;";
    public ApplicationDbContext()
        :base(connectionString, throwIfV1Schema: false)
    {
    }

    public DbSet<UserPermission> Permissions;

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<UserPermission>()
            .ToTable("AspNetPermissions")
            .HasKey(x => x.Id);

        modelBuilder.Entity<ApplicationRole>()
            .HasMany<UserPermission>(ar => ar.Permissions)
            .WithMany(up => up.Roles)
            .Map(arup =>
                {
                    arup.MapLeftKey("RoleId");
                    arup.MapRightKey("PermissionId");
                    arup.ToTable("AspNetRolePermissions");
                });
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

这为多对多关系创建了 AspNetPermissions 表和 AspNetRolePermissions 表,并为我提供了对 Roles 表的更多自定义功能(我认为没有那么多使用它,但知道我拥有它很高兴)。

在 FilterConfig.cs 上,在我添加的 FilterConfig 类下:

public class HasPermissionAttribute : ActionFilterAttribute
{
    private string _permission;

    public HasPermissionAttribute(string permission)
    {
        Permission = permission;
    }

    public string Permission
    {
        get
        {
            return _permission;
        }
        private set
        {
            _permission = value;
        }
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!CheckIfRoleHasPermission(Permission))
        {                
            var url = new UrlHelper(filterContext.RequestContext);
            var loginUrl = url.Content("/Cuenta/Ingresar");
            filterContext.HttpContext.Response.Redirect(loginUrl, true);
        }
        //base.OnActionExecuting(filterContext);
    }

    public bool CheckIfRoleHasPermission(string perm)
    {
        return false;
    }
}

我需要创建一个名为 CheckIfRoleHasPermission 的方法,该方法可以采用当前用户角色并检查是否有与该角色相关联的任何权限。关于如何做到这一点的任何想法?或者对我已经做过的事情有什么更正?

费德·安图纳

我做到了,如果有人遇到同样的情况,我只是将我的代码上传到 GitHub。这是链接:回购不再可用。有一些部分是西班牙语的,但我会尝试制作一个指南,解释我的代码的核心部分在哪里,以便它可以添加到任何项目中,稍后我也会尝试将所有内容分成不同的项目,然后上传代码到 NuGet。欢迎任何想要增加功能或与 repo 合作的人!

编辑

该项目现在更先进了,我制作了一个指南来解释它的作用。欢迎任何评论(我会接受负面评论以改进它)

编辑 2

现在已经过时了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于用户角色的ASP.NET MVC 5 Identity 2登录重定向

来自分类Dev

如何使用MVC5 ASP.NET Identity Framework对SignalR .NET客户端进行身份验证

来自分类Dev

列出asp.net Identity 2.0中的用户和角色

来自分类Dev

如何使用Identity ASP.NET Core通过代码优先迁移为用户和角色播种

来自分类Dev

如何首先在ASP.NET MVC中将Identity与Entity Framework数据库一起使用

来自分类Dev

ASP.NET(MVC)用户,角色和角色中的用户

来自分类Dev

ASP.NET(MVC)用户,角色和角色中的用户

来自分类Dev

具有ASP.Net Identity的ASP.NET MVC5中的自定义验证和角色提供程序

来自分类Dev

在ASP .NET MVC中更改角色权限

来自分类Dev

如何使用ASP.NET Identity for ASP.NET MVC 5.0实现密码重置?

来自分类Dev

如何使用ASP.NET Identity for ASP.NET MVC 5.0实现密码重置?

来自分类Dev

在ASP.NET MVC 5 Identity 2.0中使用角色

来自分类Dev

使用ASP.net Identity禁用基于角色的授权的MVC视图中的输入字段

来自分类Dev

Asp.net成员资格权限和角色

来自分类Dev

如何使用 ASP.NET Core identity v preview 3.0 创建自定义用户和角色?

来自分类Dev

使用Asp.net Identity C#MVC登录和注册也需要添加我们自己的表

来自分类Dev

ASP.Net Identity 2 RemovePassword模拟

来自分类Dev

ASP.Net Identity 2 RemovePassword模拟

来自分类Dev

ASP Identity 2.0和ASP.NET MVC项目结构

来自分类Dev

如何使用 ASP.NET Core、Identity Framework 和 Entity Framework 显示特定用户创建的内容

来自分类Dev

在ASP.NET Identity中添加角色

来自分类Dev

如何在ASP.Net MVC Identity 2中更改密码验证?

来自分类Dev

将详细信息表读取到ASP.NET MVC 5 Identity 2

来自分类Dev

ASP.NET MVC 5 Identity 2 PasswordSignInAsync方法始终返回false

来自分类Dev

使用ASP.NET Identity v2的Thinktecture Identity Server v2

来自分类Dev

检查用户是否在asp.net mvc Identity中扮演角色

来自分类Dev

获取ASP.NET MVC5 Identity系统中的所有角色名称

来自分类Dev

Asp.Net核心MVC6如何在Identity 3中初始添加角色

来自分类Dev

如何在Asp.net Identity 3.0和MVC 6中打开角色?

Related 相关文章

  1. 1

    基于用户角色的ASP.NET MVC 5 Identity 2登录重定向

  2. 2

    如何使用MVC5 ASP.NET Identity Framework对SignalR .NET客户端进行身份验证

  3. 3

    列出asp.net Identity 2.0中的用户和角色

  4. 4

    如何使用Identity ASP.NET Core通过代码优先迁移为用户和角色播种

  5. 5

    如何首先在ASP.NET MVC中将Identity与Entity Framework数据库一起使用

  6. 6

    ASP.NET(MVC)用户,角色和角色中的用户

  7. 7

    ASP.NET(MVC)用户,角色和角色中的用户

  8. 8

    具有ASP.Net Identity的ASP.NET MVC5中的自定义验证和角色提供程序

  9. 9

    在ASP .NET MVC中更改角色权限

  10. 10

    如何使用ASP.NET Identity for ASP.NET MVC 5.0实现密码重置?

  11. 11

    如何使用ASP.NET Identity for ASP.NET MVC 5.0实现密码重置?

  12. 12

    在ASP.NET MVC 5 Identity 2.0中使用角色

  13. 13

    使用ASP.net Identity禁用基于角色的授权的MVC视图中的输入字段

  14. 14

    Asp.net成员资格权限和角色

  15. 15

    如何使用 ASP.NET Core identity v preview 3.0 创建自定义用户和角色?

  16. 16

    使用Asp.net Identity C#MVC登录和注册也需要添加我们自己的表

  17. 17

    ASP.Net Identity 2 RemovePassword模拟

  18. 18

    ASP.Net Identity 2 RemovePassword模拟

  19. 19

    ASP Identity 2.0和ASP.NET MVC项目结构

  20. 20

    如何使用 ASP.NET Core、Identity Framework 和 Entity Framework 显示特定用户创建的内容

  21. 21

    在ASP.NET Identity中添加角色

  22. 22

    如何在ASP.Net MVC Identity 2中更改密码验证?

  23. 23

    将详细信息表读取到ASP.NET MVC 5 Identity 2

  24. 24

    ASP.NET MVC 5 Identity 2 PasswordSignInAsync方法始终返回false

  25. 25

    使用ASP.NET Identity v2的Thinktecture Identity Server v2

  26. 26

    检查用户是否在asp.net mvc Identity中扮演角色

  27. 27

    获取ASP.NET MVC5 Identity系统中的所有角色名称

  28. 28

    Asp.Net核心MVC6如何在Identity 3中初始添加角色

  29. 29

    如何在Asp.net Identity 3.0和MVC 6中打开角色?

热门标签

归档