博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最简实例演示asp.net5中用户认证和授权(2)
阅读量:4361 次
发布时间:2019-06-07

本文共 4709 字,大约阅读时间需要 15 分钟。

上接

基础类建立好后,下一步就要创建对基础类进行操作的类了,也就是实现基础类的增删改查(听起来不太高大上),当然,为了使用asp.net5的认证机制,这些都是通过特定的接口来实现的。

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

1     public interface IQueryableRoleStore
: IRoleStore
, IDisposable where TRole : class2 {3 4 IQueryable
Roles { get; }5 }
1     public interface IRoleStore
: IDisposable where TRole : class 2 { 3 4 Task
CreateAsync(TRole role, CancellationToken cancellationToken); 5 Task
DeleteAsync(TRole role, CancellationToken cancellationToken); 6 Task
FindByIdAsync(string roleId, CancellationToken cancellationToken); 7 Task
FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken); 8 Task
GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken); 9 Task
GetRoleIdAsync(TRole role, CancellationToken cancellationToken);10 Task
GetRoleNameAsync(TRole role, CancellationToken cancellationToken);11 Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken);12 Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken);13 Task
UpdateAsync(TRole role, CancellationToken cancellationToken);14 }

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

1 public class HDRoleStore
: IQueryableRoleStore
2 where TRole : HDRole, new() 3 { 4 ///
5 /// 存储所有预定义的角色 6 /// 7 private readonly Dictionary
_roles = new Dictionary
(); 8 9 ///
10 /// 所有角色 11 /// 12 public IQueryable
Roles 13 { 14 get 15 { 16 if (_roles.Count == 0) 17 { 18 TRole role = new TRole(); 19 role.Id = "admin"; 20 role.Name = "管理员"; 21 _roles.Add(role.Id, role); 22 23 role = new TRole(); 24 role.Id = "user"; 25 role.Name = "用户"; 26 _roles.Add(role.Id, role); 27 28 role = new TRole(); 29 role.Id = "power"; 30 role.Name = "大虾"; 31 _roles.Add(role.Id, role); 32 } 33 return _roles.Values.AsQueryable(); 34 } 35 } 36 37 public Task
CreateAsync(TRole role, CancellationToken cancellationToken) 38 { 39 _roles[role.Id] = role; 40 return Task.FromResult(IdentityResult.Success); 41 } 42 43 public Task
DeleteAsync(TRole role, CancellationToken cancellationToken) 44 { 45 if (role == null || !_roles.ContainsKey(role.Id)) 46 { 47 throw new InvalidOperationException("Unknown role"); 48 } 49 _roles.Remove(role.Id); 50 return Task.FromResult(IdentityResult.Success); 51 } 52 53 public void Dispose() 54 { 55 56 } 57 58 public Task
FindByIdAsync(string roleId, CancellationToken cancellationToken) 59 { 60 if (_roles.ContainsKey(roleId)) 61 { 62 return Task.FromResult(_roles[roleId]); 63 } 64 return Task.FromResult
(null); 65 } 66 67 public Task
FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken) 68 { 69 return 70 Task.FromResult( 71 Roles.SingleOrDefault(r => String.Equals(r.Name, normalizedRoleName, StringComparison.OrdinalIgnoreCase))); 72 } 73 74 public Task
GetNormalizedRoleNameAsync(TRole role, CancellationToken cancellationToken) 75 { 76 return Task.FromResult(role.Name); 77 } 78 79 public Task
GetRoleIdAsync(TRole role, CancellationToken cancellationToken) 80 { 81 return Task.FromResult(role.Id); 82 } 83 84 public Task
GetRoleNameAsync(TRole role, CancellationToken cancellationToken) 85 { 86 return Task.FromResult(role.Name); 87 } 88 89 public Task SetNormalizedRoleNameAsync(TRole role, string normalizedName, CancellationToken cancellationToken) 90 { 91 role.Name = normalizedName; 92 return Task.FromResult(0); 93 } 94 95 public Task SetRoleNameAsync(TRole role, string roleName, CancellationToken cancellationToken) 96 { 97 role.Name = roleName; 98 return Task.FromResult(0); 99 }100 101 public Task
UpdateAsync(TRole role, CancellationToken cancellationToken)102 {103 _roles[role.Id] = role;104 return Task.FromResult(IdentityResult.Success);105 }106 }

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

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

下一篇:

转载于:https://www.cnblogs.com/aspnet5/p/4874374.html

你可能感兴趣的文章
android 省市区三级联动
查看>>
推荐一个好用的免费简历word模板
查看>>
MySQL中的查询子句
查看>>
『重构--改善既有代码的设计』读书笔记----代码坏味道【4】
查看>>
Java开发者值得关注的7款新工具
查看>>
Spring Boot + Jersey
查看>>
Web前端学习的路径分享,前端学习方法及途径
查看>>
贪吃蛇小游戏
查看>>
USE PDFCREATE TO CREATE A PDF FILE
查看>>
第八章 watch监听 84 watch-监视路由地址的改变
查看>>
IDEA tomcat乱码
查看>>
个人作业3——个人总结(Alpha阶段)
查看>>
第十章—DOM(三)——Text类型
查看>>
python装饰器
查看>>
vue中时间控件绑定多个输入框
查看>>
gulp browser-sync自动刷新插件
查看>>
在Django运行安装mysqlclient和pymysql
查看>>
结队项目——第一次作业
查看>>
第三阶段 14_JavaWeb基础_JQuery控制页面
查看>>
ThinkPHP使用smarty模板引擎的方法
查看>>