asp.net5中用戶認證與授權(quán)(2)
上篇文章給大家介紹了asp.net5中用戶認證與授權(quán)(1),基礎(chǔ)建立好了,緊接著就要創(chuàng)建對基礎(chǔ)類進行操作的類,也就是實現(xiàn)基礎(chǔ)類的增刪改查當然,為了使用asp.net5的認證機制,這些都是通過特定的接口來實現(xiàn)的。
比如,對于角色來說,角色管理要實現(xiàn)的接口如下:
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); }
其實,也沒什么復(fù)雜,一個是獲得所有預(yù)定義角色的列表,另一個是關(guān)于角色的增刪改查而已,代碼如下:
public class HDRoleStore<TRole> : IQueryableRoleStore<TRole> where TRole : HDRole, new() { /// <summary> /// 存儲所有預(yù)定義的角色 /// </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行,我們的方法里直接寫死了角色列表,如果相結(jié)合具體的項目的話,我相信葉良辰有一百種方法從各種數(shù)據(jù)庫、配置文件等取得角色列表,而其他程序代碼卻基本不用更改。
當然,asp.net5自帶的默認實現(xiàn)實現(xiàn)了很多其他接口,這里為了最簡單起見,只實現(xiàn)了最基本的。
以上就是給大家介紹的asp.net5中用戶認證與授權(quán)(2),希望大家喜歡。后續(xù)還會持續(xù)更新,請大家持續(xù)關(guān)注本站。
相關(guān)文章
.NET?Core基于EMIT編寫的輕量級AOP框架CZGL.AOP
這篇文章介紹了.NET?Core基于EMIT編寫的輕量級AOP框架CZGL.AOP,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02使用 Visual Studio 的“代碼度量值”來改進代碼質(zhì)量
代碼度量是一組軟件度量值,使開發(fā)人員可以更好地了解他們正在開發(fā)的代碼.這篇文章主要介紹了通過 Visual Studio 的“代碼度量值”來改進代碼質(zhì)量,需要的朋友可以參考下2017-11-11淺析Repeater控件的使用 (原樣導(dǎo)出和動態(tài)顯示/隱藏Repeater中的列)
本文主要介紹了淺析Repeater控件的使用 (原樣導(dǎo)出和動態(tài)顯示/隱藏Repeater中的列)的具體方法,需要的朋友可以看下2016-12-12ASP.NET泛型三之使用協(xié)變和逆變實現(xiàn)類型轉(zhuǎn)換
這篇文章介紹了ASP.NET使用協(xié)變和逆變實現(xiàn)泛型類型轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08