当前位置: 首页 > 编程笔记 >

asp.net5中用户认证与授权(2)

宋臻
2023-03-14
本文向大家介绍asp.net5中用户认证与授权(2),包括了asp.net5中用户认证与授权(2)的使用技巧和注意事项,需要的朋友参考一下

上篇文章给大家介绍了asp.net5中用户认证与授权(1),基础建立好了,紧接着就要创建对基础类进行操作的类,也就是实现基础类的增删改查当然,为了使用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中的用户认证与授权(1),包括了asp.net5中的用户认证与授权(1)的使用技巧和注意事项,需要的朋友参考一下 就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview。 asp.net5中,关于用户的认证和授权提供了非常丰富的功能,如果结合ef7的

  • 在安装集群的时候我们在 master 节点上生成了一堆证书、token,还在 kubelet 的配置中用到了 bootstrap token,安装各种应用时,为了能够与 API server 通信创建了各种 service account,在 Dashboard 中使用了 kubeconfig 或 token 登陆,那么这些都属于什么认证方式?如何区分用户的?我特地翻译了下这篇官方文档,想你看了之

  • Authentication, authorization, and permissions (认证,授权和权限) Access control concepts (访问控制的概念) General process (一般流程) Exposing and hiding models, methods, and endpoints (揭露和隐藏模式,方法和触发点) Hiding methods an

  • 我希望能够对客户机进行身份验证/授权,以产生/消费某些主题的消息。它们将是我们vpn的一部分(包括aws)。根据我对可用文档的理解,唯一的选择是颁发客户端证书并基于客户端DNS设置ACL?不幸的是,我不能使用我的私人CA(我在linux笔记本电脑上创建的)来创建客户端证书。于是出现了以下问题: null 请开导我:) 提前谢谢marcel

  • Serenity 使用一些抽象(abstractions)来与你的应用程序自身的用户身份验证和授权机制一起工作。 Serenity.Abstractions.IAuthenticationService Serenity.Abstractions.IAuthorizationService Serenity.Abstractions.IPermissionService Serenity.Abst

  • 请求地址 https://api.es.xiaojukeji.com/river/Auth/authorize 返回数据格式 JSON 请求方式 POST 是否需要登录 否 访问授权限制 调用方访问授权后,将返回的授权信息缓存半小时(缓存过期或调用服务时返回401=>access_token不合法或已过期,再重新申请授权),不要每次调用接口都申请一次授权。 请求参数 名称 类型 必选 描述 cli