首页 > 编程 > .NET > 正文

asp.net5中用户认证与授权(2)

2020-01-17 23:06:46
字体:
来源:转载
供稿:网友

上篇文章给大家介绍了asp.net5中用户认证与授权(1),基础建立好了,紧接着就要创建对基础类进行操作的类,也就是实现基础类的增删改查当然,为了使用asp.net5的认证机制,这些都是通过特定的接口来实现的。

比如,对于角色来说,角色管理要实现的接口如下:

   public interface IQueryableRoleStore<TRole> : IRoleStore<TRole>, IDisposable where TRole : class   {     IQueryable<TRole> Roles { get; }   }   public interface IRoleStore<TRole> : IDisposable where TRole : class   {     Task<IdentityResult> CreateAsync(TRole role, CancellationToken cancellationToken);     Task<IdentityResult> DeleteAsync(TRole role, CancellationToken cancellationToken);     Task<TRole> FindByIdAsync(string roleId, CancellationToken cancellationToken);     Task<TRole> FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken);     Task<string> GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken);     Task<string> GetRoleIdAsync(TRole role, CancellationToken cancellationToken);     Task<string> GetRoleNameAsync(TRole role, CancellationToken cancellationToken);     Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken);     Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken);    Task<IdentityResult> UpdateAsync(TRole role, CancellationToken cancellationToken);   }

其实,也没什么复杂,一个是获得所有预定义角色的列表,另一个是关于角色的增删改查而已,代码如下:

 public class HDRoleStore<TRole> : IQueryableRoleStore<TRole>      where TRole : HDRole, new()    {      /// <summary>      /// 存储所有预定义的角色      /// </summary>      private readonly Dictionary<string, TRole> _roles = new Dictionary<string, TRole>();      /// <summary>     /// 所有角色     /// </summary>     public IQueryable<TRole> Roles     {       get       {         if (_roles.Count == )         {           TRole role = new TRole();           role.Id = "admin";           role.Name = "管理员";           _roles.Add(role.Id, role);           role = new TRole();           role.Id = "user";           role.Name = "用户";           _roles.Add(role.Id, role);           role = new TRole();           role.Id = "power";           role.Name = "大虾";           _roles.Add(role.Id, role);         }         return _roles.Values.AsQueryable();       }     }     public Task<IdentityResult> CreateAsync(TRole role, CancellationToken cancellationToken)     {       _roles[role.Id] = role;       return Task.FromResult(IdentityResult.Success);     }     public Task<IdentityResult> DeleteAsync(TRole role, CancellationToken cancellationToken)     {       if (role == null || !_roles.ContainsKey(role.Id))       {         throw new InvalidOperationException("Unknown role");       }       _roles.Remove(role.Id);       return Task.FromResult(IdentityResult.Success);     }     public void Dispose()     {     }     public Task<TRole> FindByIdAsync(string roleId, CancellationToken cancellationToken)     {       if (_roles.ContainsKey(roleId))       {         return Task.FromResult(_roles[roleId]);       }       return Task.FromResult<TRole>(null);     }     public Task<TRole> FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken)     {       return          Task.FromResult(            Roles.SingleOrDefault(r => String.Equals(r.Name, normalizedRoleName, StringComparison.OrdinalIgnoreCase)));     }     public Task<string> GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken)     {       return Task.FromResult(role.Name);     }     public Task<string> GetRoleIdAsync(TRole role, CancellationToken cancellationToken)     {       return Task.FromResult(role.Id);     }     public Task<string> GetRoleNameAsync(TRole role, CancellationToken cancellationToken)     {       return Task.FromResult(role.Name);     }     public Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken)     {       role.Name = normalizedName;       return Task.FromResult();     }     public Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken)     {       role.Name = roleName;       return Task.FromResult();     }     public Task<IdentityResult> UpdateAsync(TRole role, CancellationToken cancellationToken)     {       _roles[role.Id] = role;       return Task.FromResult(IdentityResult.Success);     }   }

可以看到,在第12行,我们的方法里直接写死了角色列表,如果相结合具体的项目的话,我相信叶良辰有一百种方法从各种数据库、配置文件等取得角色列表,而其他程序代码却基本不用更改。

当然,asp.net5自带的默认实现实现了很多其他接口,这里为了最简单起见,只实现了最基本的。

以上就是给大家介绍的asp.net5中用户认证与授权(2),希望大家喜欢。后续还会持续更新,请大家持续关注本站。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表