最简实例演示asp.net5中用户认证和授权(2)
基础类建立好后,下一步就要创建对基础类进行操作的类了,也就是实现基础类的增删改查(听起来不太高大上),当然,为了使用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)的更多相关文章
- 最简实例演示asp.net5中用户认证和授权(4)
上篇: 最简实例演示asp.net5中用户认证和授权(3) 上面我们把自定义认证和授权的相关的最小基础类和要实现的接口都实现了,下面就是如何来进行认证和授权的配置. 首先我们要告诉系统,我们的用户和角 ...
- 最简实例演示asp.net5中用户认证和授权(3)
上接: 最简实例演示asp.net5中用户认证和授权(2) 在实现了角色的各种管理接口后,下一步就是实现对用户的管理,对用户管理的接口相对多一些,必须要实现的有如下三个: 1 public inter ...
- 最简实例演示asp.net5中用户认证和授权(1)
asp.net5中,关于用户的认证和授权提供了非常丰富的功能,如果结合ef7的话,可以自动生成相关的数据库表,调用也很方便. 但是,要理解这么一大堆关于认证授权的类,或者想按照自己项目的特定要求对认证 ...
- [转]asp.net5中使用NLog进行日志记录
本文转自:http://www.cnblogs.com/sguozeng/articles/4861303.html asp.net5中使用NLog进行日志记录 asp.net5中提供了性能强大的日志 ...
- asp.net5中使用NLog进行日志记录
asp.net5中提供了性能强大的日志框架,本身也提供了几种日志记录方法,比如记录到控制台或者事件中等,但是,对大部分程序员来说,更喜欢使用类似log4net或者Nlog这种日志记录方式,灵活而强大. ...
- 【翻译】asp.net core2.1认证和授权解密
asp.net core2.1认证和授权解密 本篇文章翻译自:https://digitalmccullough.com/posts/aspnetcore-auth-system-demystifie ...
- asp.net core2.1认证和授权解密
来源:https://www.cnblogs.com/pangjianxin/p/9372562.html asp.net core2.1认证和授权解密 本篇文章翻译自:https://digital ...
- springSecurity + jwt + redis 前后端分离用户认证和授权
记录一下使用springSecurity搭建用户认证和授权的代码... 技术栈使用springSecurity + redis + JWT + mybatisPlus 部分代码来自:https://b ...
- ASP.NET5 中静态文件的各种使用方式
所谓静态文件,包含HTML文件,css文件.图片文件和js文件等,他们是服务器直接读取到客户端的一些资源,在这篇文章中,我们将解释关于ASP.NET5和静态文件的一些内容. 服务端的静态文件 默认情况 ...
随机推荐
- PCB设计基础及技巧
一.设计步骤 (1)PCB布局 先放置接口类外设: 根据飞线的接口方向,定位各个模块的方位: 局部模块化(按照一个方向逐个局部化): (2)PCB布线 设置设计规则: 先布过孔(电源.地.长线),防止 ...
- [HDU1754]I Hate It线段树裸题
http://acm.hdu.edu.cn/showproblem.php?pid=1754 解题关键:刚开始死活超时,最后发现竟然是ch,和t1.t2每次循环都定义的锅,以后养成建全局变量的习惯. ...
- 34、NCBI的子库名称
转载:http://fhqdddddd.blog.163.com/blog/static/1869915420107188527933/ 参考资料: http://www.ncbi.nlm.nih.g ...
- qboimathtest1 t2 配对
题目 有1~n一共n个数,n为偶数.小Q要把这n个数随机地两两配对.令每一对的权值为它们两个数的和.小Q想要知道这n/2对里最大的权值的期望是多少.请输出答案对10^9+7取模的值. [输入] 一行一 ...
- p2023&bzoj1798 维护序列
传送门(洛谷) 传送门(bzoj) 题目 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,…,aN .有如下三种操作形式: (1)把数列中的一段数全 ...
- servlet与filter的加载顺序详解
项目:3个filter,3个servlet,匹配的url路径/hello. 情况1:servlet没加<load-on-startup></load-on-startup>情 ...
- Instruments10 分析某个类中方法的执行时间
此步骤也可用户内存分配.内存泄漏的检测 最新操作步骤参考: https://www.jianshu.com/p/e499ce63ed72
- ASP.NET jquery 获取服务器控件ID
一般方法: jQuery("#txtUserName").val(); 如果页面加载了母版页或者自定义控件:该页面的ID有可能会被篡改(可能是因为避免控件ID冲突的机制),因此强烈 ...
- Spark Streaming 官网上提到的几点调优
总的来说,需要考虑以下两点: 1. 有效地运用集群资源去减少每个批次处理的时间 2. 正确的设置batch size,以使得处理速度能跟上接收速度 一. 为了减少处理时间,主要有以下几个优化点: 1 ...
- 阿里、腾讯热门面试题:聊聊Unix与Java的IO模型?(含详细解析)
众所周知 如果去百度.腾讯等一线大厂面试,一定会深入考候选人的基础技术功底,其中尤为关键和重视的就是IO相关的技术和知识. 而要搞明白IO相关的概念,首先就得弄清楚同步与异步,阻塞与非阻塞到底是什么意 ...