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

