在介绍分配方法之前,我们必须理解权限关系,这里面涉及到三个对象:用户,角色,权限,权限分配到角色,角色再分配到用户,当某个用户属于某个角色后,这个用户就具有了角色所包含的权限列表,比如现在有一个信息管理员角色,这个角色包含了信息删除权限,当张三这个用户具有信息管理员角色后,张三就具备了信息删除的权限。在某些特殊场景下,权限也可以直接分配到用户,也就是说可以直接把某些特定的权限,绕过角色,直接分配给用户。Microsoft.AspNetCore.Identity.EntityFrameworkCore框架中都提供了这样的支持。
先把框架中主要的业务对象类介绍一下:
IdentityUser:表示一个用户信息
IdentityRole:表示一个角色信息
IdentityRoleClaim<TKey>:表示角色具有的权限
IdentityUserClaim<TKey>:表示用户具有的权限
IdentityUserRole<TKey>:表示用户角色关系
基本概念理解后,下面我们就来看一下如何进行权限分配。
1,分配权限到角色:Microsoft.AspNetCore.Identity.EntityFrameworkCore中提供了RoleManager类,类中提供了把权限分配到角色的方法:
Task<IdentityResult> AddClaimAsync(TRole role, Claim claim)
第一个参数表示对应的角色对象,第二个参数表示一个权限信息
2,分配权限到用户:Microsoft.AspNetCore.Identity.EntityFrameworkCore中提供了UserManager类,类中提供了把权限分配到用户的方法:
Task<IdentityResult> AddClaimAsync(TUser user, Claim claim)
第一个参数表示对应的用户对象,第二个参数表示一个权限信息
3,分配用户到角色:用到的同样是UserManager类,使用的方法:
AddToRoleAsync(TUser user, string role)
第一个参数表示的是用户对象,第二个是角色的名称
4,获取角色当前具有的权限列表:
Task<IList<Claim>> RoleManager.GetClaimsAsync(TRole role)
5,获取用户当前具有的权限列表:
Task<IList<Claim>> UserManager.GetClaimsAsync(TUser user)