Asp MVC实体框架检查用户是否具有权限或角色

时间:2016-08-01 10:07:12

标签: c# asp.net-mvc entity-framework linq oop

我有以下应用程序用户模型。我想实现方法来检查用户是否具有角色以及用户是否具有权限。用户可以处于多个角色,角色可以拥有多个权限。

public class ApplicationUser : IdentityUser
{

    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<ApplicationRole> Roles { get; set; }

    public bool HasRole(string _role)
    {
        return Roles.Any(r => r.Name == _role);
    }


    public bool HasPermission(string _permission)
    {
        return Roles.Any(r => r.Permissions
                  .Any(p => p.Name == _permission));
    }
}

这是我的权限和角色类:

public class Permission
{
    public byte Id { get; set; }
    public string Name { get; set; }

    public virtual List<ApplicationRole> Roles { get; set; }

}


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

    public virtual ICollection<Permission> Permissions { get; set; }

    public bool IsPermissionInRole(string _permission)
    {
        return Permissions.Any(p => p.Name == _permission);
    }

}

在Laravel中,我可以做一些简单的事情:

public function hasRole($role)
{
    if (is_string($role)) {
        return $this->roles->contains('name', $role);
    }
    return !! $role->intersect($this->roles)->count();
}

public function hasPermission(Permission $permission)
{
    return $this->hasRole($permission->roles);
}

如何在ASP MVC中做类似的事情?注意我知道内置的User.IsInRole("Admin")方法,但是如何实现hasPermission方法?

在ApplicationUser类的以下行上的

* UPDATE * 我得到了intellisense消息:

public virtual List<ApplicationRole> Roles { get; set; }

ApplicationUser.Roles hides inherited member `IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserclaim>.Roles
To make the current memeber override that implementation add the overide keyword

不确定这意味着什么,但是这个导航属性是否允许我获取分配给用户的角色,或者只是表中所有角色的列表,在这种情况下,hasRole并且具有Permission方法不会起作用?< / p>

1 个答案:

答案 0 :(得分:0)

如下:

public bool HasPermission(string _permission)
{
    return Roles.Any(r => r.IsPermissionInRole(_permission));
}

更新

您的身份模型不正确。正确的模型和更正的 HasPermission 方法为here