服务器之家

服务器之家 > 正文

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

时间:2019-12-25 13:01     来源/作者:mrr

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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),希望大家喜欢。后续还会持续更新,请大家持续关注本站。

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
返回顶部

498
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40