ASP.NET5主要提供了兩種應(yīng)用程序,其一就是ASP.NET5控制臺(tái)程序,另外一個(gè)是ASP.NET Web 應(yīng)用程序。本文給大家介紹asp.net5中用戶認(rèn)證與授權(quán)(2),需要的童鞋可以參考下
上篇文章給大家介紹了asp.net5中用戶認(rèn)證與授權(quán)(1),基礎(chǔ)建立好了,緊接著就要?jiǎng)?chuàng)建對(duì)基礎(chǔ)類進(jìn)行操作的類,也就是實(shí)現(xiàn)基礎(chǔ)類的增刪改查當(dāng)然,為了使用asp.net5的認(rèn)證機(jī)制,這些都是通過特定的接口來實(shí)現(xiàn)的。
比如,對(duì)于角色來說,角色管理要實(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í),也沒什么復(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行,我們的方法里直接寫死了角色列表,如果相結(jié)合具體的項(xiàng)目的話,我相信葉良辰有一百種方法從各種數(shù)據(jù)庫、配置文件等取得角色列表,而其他程序代碼卻基本不用更改。
當(dāng)然,asp.net5自帶的默認(rèn)實(shí)現(xiàn)實(shí)現(xiàn)了很多其他接口,這里為了最簡(jiǎn)單起見,只實(shí)現(xiàn)了最基本的。
以上就是給大家介紹的asp.net5中用戶認(rèn)證與授權(quán)(2),希望大家喜歡。后續(xù)還會(huì)持續(xù)更新,請(qǐng)大家持續(xù)關(guān)注本站。
新聞熱點(diǎn)
疑難解答
圖片精選