asp.net5中用户认证与授权(2)
上篇文章给大家介绍了asp.net5中用户认证与授权(1),基础建立好了,紧接着就要创建对基础类进行操作的类,也就是实现基础类的增删改查当然,为了使用asp.net5的认证机制,这些都是通过特定的接口来实现的。
比如,对于角色来说,角色管理要实现的接口如下:
publicinterfaceIQueryableRoleStore<TRole>:IRoleStore<TRole>,IDisposablewhereTRole:class
{
IQueryable<TRole>Roles{get;}
}
publicinterfaceIRoleStore<TRole>:IDisposablewhereTRole:class
{
Task<IdentityResult>CreateAsync(TRolerole,CancellationTokencancellationToken);
Task<IdentityResult>DeleteAsync(TRolerole,CancellationTokencancellationToken);
Task<TRole>FindByIdAsync(stringroleId,CancellationTokencancellationToken);
Task<TRole>FindByNameAsync(stringnormalizedRoleName,CancellationTokencancellationToken);
Task<string>GetNormalizedRoleNameAsync(TRolerole,CancellationTokencancellationToken);
Task<string>GetRoleIdAsync(TRolerole,CancellationTokencancellationToken);
Task<string>GetRoleNameAsync(TRolerole,CancellationTokencancellationToken);
TaskSetNormalizedRoleNameAsync(TRolerole,stringnormalizedName,CancellationTokencancellationToken);
TaskSetRoleNameAsync(TRolerole,stringroleName,CancellationTokencancellationToken);
Task<IdentityResult>UpdateAsync(TRolerole,CancellationTokencancellationToken);
}
其实,也没什么复杂,一个是获得所有预定义角色的列表,另一个是关于角色的增删改查而已,代码如下:
publicclassHDRoleStore<TRole>:IQueryableRoleStore<TRole>
whereTRole:HDRole,new()
{
///<summary>
///存储所有预定义的角色
///</summary>
privatereadonlyDictionary<string,TRole>_roles=newDictionary<string,TRole>();
///<summary>
///所有角色
///</summary>
publicIQueryable<TRole>Roles
{
get
{
if(_roles.Count==)
{
TRolerole=newTRole();
role.Id="admin";
role.Name="管理员";
_roles.Add(role.Id,role);
role=newTRole();
role.Id="user";
role.Name="用户";
_roles.Add(role.Id,role);
role=newTRole();
role.Id="power";
role.Name="大虾";
_roles.Add(role.Id,role);
}
return_roles.Values.AsQueryable();
}
}
publicTask<IdentityResult>CreateAsync(TRolerole,CancellationTokencancellationToken)
{
_roles[role.Id]=role;
returnTask.FromResult(IdentityResult.Success);
}
publicTask<IdentityResult>DeleteAsync(TRolerole,CancellationTokencancellationToken)
{
if(role==null||!_roles.ContainsKey(role.Id))
{
thrownewInvalidOperationException("Unknownrole");
}
_roles.Remove(role.Id);
returnTask.FromResult(IdentityResult.Success);
}
publicvoidDispose()
{
}
publicTask<TRole>FindByIdAsync(stringroleId,CancellationTokencancellationToken)
{
if(_roles.ContainsKey(roleId))
{
returnTask.FromResult(_roles[roleId]);
}
returnTask.FromResult<TRole>(null);
}
publicTask<TRole>FindByNameAsync(stringnormalizedRoleName,CancellationTokencancellationToken)
{
return
Task.FromResult(
Roles.SingleOrDefault(r=>String.Equals(r.Name,normalizedRoleName,StringComparison.OrdinalIgnoreCase)));
}
publicTask<string>GetNormalizedRoleNameAsync(TRolerole,CancellationTokencancellationToken)
{
returnTask.FromResult(role.Name);
}
publicTask<string>GetRoleIdAsync(TRolerole,CancellationTokencancellationToken)
{
returnTask.FromResult(role.Id);
}
publicTask<string>GetRoleNameAsync(TRolerole,CancellationTokencancellationToken)
{
returnTask.FromResult(role.Name);
}
publicTaskSetNormalizedRoleNameAsync(TRolerole,stringnormalizedName,CancellationTokencancellationToken)
{
role.Name=normalizedName;
returnTask.FromResult();
}
publicTaskSetRoleNameAsync(TRolerole,stringroleName,CancellationTokencancellationToken)
{
role.Name=roleName;
returnTask.FromResult();
}
publicTask<IdentityResult>UpdateAsync(TRolerole,CancellationTokencancellationToken)
{
_roles[role.Id]=role;
returnTask.FromResult(IdentityResult.Success);
}
}
可以看到,在第12行,我们的方法里直接写死了角色列表,如果相结合具体的项目的话,我相信叶良辰有一百种方法从各种数据库、配置文件等取得角色列表,而其他程序代码却基本不用更改。
当然,asp.net5自带的默认实现实现了很多其他接口,这里为了最简单起见,只实现了最基本的。
以上就是给大家介绍的asp.net5中用户认证与授权(2),希望大家喜欢。后续还会持续更新,请大家持续关注本站。