【问题标题】:how can i add a third attribute to my user-role table?如何向我的用户角色表添加第三个属性?
【发布时间】:2019-02-27 13:44:55
【问题描述】:

我们在项目中使用基于用户角色的授权。我们需要在我们的表(用户角色表)中添加一个属性,这会导致用户在该属性建立时拥有角色。例如,我们想说位置 X 中的用户 A 具有特殊角色,但位置 Y 中的同一用户具有其他角色。 (使用 .net 核心)

【问题讨论】:

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


    【解决方案1】:

    查看以下内容:

    public class ApplicationUserRole : IdentityUserRole<string>
    {
        public virtual ApplicationUser User { get; set; }
        public virtual ApplicationRole Role { get; set; }
        public string MyProperty { get; set; }
    }
    

    参考here

    【讨论】:

    • 感谢您的回复,但我的问题是我想用第三个属性识别我的用户,如果我的用户在两个不同的公司有两个角色并且我想删除公司 A,我的用户角色被破坏在 A 公司,但在 B 公司没有变化。
    • 我不知道我是否理解正确,但如果我理解正确,我会保持简单,只需制定一个命名约定并为所有角色添加前缀,如下所示:CompA_admin、CompA_supervisor、CompB_admin等然后创建一个函数,如果用户离开公司,则将用户从所有以 CompA 开头的角色中删除。
    【解决方案2】:

    如果你想让一个用户拥有多个角色,你可以添加一个继承IdentityRoleApplicationRole类,并将ApplicationUserApplicationRole之间的关系更改为一对多 strong>,请参考以下内容:

    ApplicationRole 类

     public class ApplicationRole:IdentityRole
    {
        public string Location { get; set; }//add the stuff you want
        public ApplicationUser ApplicationUser { get; set; }
    }
    

    ApplicationUser 类

     public class ApplicationUser:IdentityUser
    {
        public List<ApplicationRole> ApplicationRoles { get; set; }
    }
    

    在 Fluent API 中配置一对多关系

    public DbSet<ApplicationUser> ApplicationUser { get; set; }
    public DbSet<ApplicationRole> ApplicationRole { get; set; }
    
    protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<ApplicationUser>()
                    .HasMany(u => u.ApplicationRoles)
                    .WithOne(r => r.ApplicationUser);
        }
    

    【讨论】:

    • 感谢您的回复,但我的问题是我想用第三个属性识别我的用户,如果我的用户在两个不同的公司有两个角色并且我想删除公司 A,我的用户角色被破坏在 A 公司,但在 B 公司没有变化。
    • 你的意思是用户的角色是由后面添加的第三个属性决定的吗?是不是每个公司都有一些相同的角色,但是同一个用户在不同的公司有不同的角色?如果您可以分享您尝试过的相关代码,将有助于我们提供更有效的建议。
    • 是的,我们公司有很多角色,一个用户可以在彼此中扮演不同的角色。我们想通过公司代码等第三个属性来识别我们的用户。
    【解决方案3】:

    除了更改角色表之外,还有一个用于这些自定义的特殊表,称为用户声明表。在这里,您可以为用户分配新的和不同的属性。角色只是 ASP.NET Core Identity 中的另一个用户声明,将在后台自动转换为用户声明。定义一个新的用户声明 (companyB, attrX), (companyA, attrZ)。然后定义一个新的授权策略供它使用。 这里有一些关于user-claimscustom policies的官方文档。

    【讨论】:

    • 我认为这是迄今为止最好的答案,因为它实际上是指asp.net核心功能。
    猜你喜欢
    • 2021-07-27
    • 2021-06-11
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2018-09-03
    • 2018-09-10
    相关资源
    最近更新 更多