为了账号安全,请及时绑定邮箱和手机立即绑定

Easy.Admin - 基于 Asp.Net Core 的通用权限管理系统

标签:
C#

Easy.Admin - 基于 Asp.Net Core 的通用权限管理系统

  • 经过间断的一年多接近两年的修修补补,从 Asp.Net Mvc 到 Asp.Net Core,到如今.Net Core 3.0 正式版发布,这个项目终于可以发一个版本了。虽然还有不少问题,但是总归应该没有大问题
  • 这个项目一开始是我个人的学习项目,基于新生命 X 组件的 Api 项目,将 Asp.Net Core 的一些东西运用于实际,简化请求处理流程,后来就用到公司项目上了。作为基础的通用权限管理系统,基本每个公司应该都会有的,这个项目用起来也不错,所以也就这样不断默默完善,现在终于到了给她整理发个版的时候了
  • 另一个目的就是给小伙伴们一个参考,都是很基础的东西,官网文档 https://docs.microsoft.com/zh-cn/aspnet/core/ 上都有。有归有,你不一定会看,看了也不一定懂,懂了也不一定会动手搞一下。所以这里提供给大家复制粘贴,作为一个参考,添加想要的功能到自己的项目
  • 项目地址 https://github.com/xxred/Easy.Admin
  • 下面介绍一下项目的一些功能,部分处理流程

功能概览

        public void ConfigureServices(IServiceCollection services)
        {
            // 添加数据库连接
            services.AddConnectionStr();

            // 添加身份标识Identity
            services.AddIdentity(options =>
            {
                options.ClaimsIdentity.UserIdClaimType = JwtRegisteredClaimNames.Sub;
                options.ClaimsIdentity.UserNameClaimType = JwtRegisteredClaimNames.UniqueName;
            });

            // 添加身份验证
            services.ConfigAuthentication();

            services.AddMvc(options =>
            {
                options.ModelBinderProviders.Insert(0, new PagerModelBinderProvider());
                options.ModelBinderProviders.Insert(0, new EntityModelBinderProvider());
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
            .ConfigJsonOptions();

            // 文档
            services.ConfigSwaggerGen();

            // 跨域
            services.AddCors();

            // 扫描控制器添加菜单
            services.ScanController();
        }
  1. 第一个是添加字符串链接,设置数据库连接字符串,格式其实自己定就可以了,只要把对应字符串设置上就行了,不用管格式到底是什么,怎么高兴怎么设置

    {
      "connectionStrings": {
        "IdentityServer": {
          "connectionString": "Server=127.0.0.1;Port=3306;Database=IdentityServer;Uid=root;Pwd=123456;",
          "providerName": "MySql.Data.MySqlClient"
        },
        "Membership": {
          "connectionString": "Server=127.0.0.1;Port=3306;Database=IdentityServer;Uid=root;Pwd=123456;",
          "providerName": "MySql.Data.MySqlClient"
        }
      }
    }
    
  2. 对应微软的 Identity 库,只不过用户类型修改为 x 组件的,登录注销等相关功能使用 UserManager,所以可以自由切换实体,使用任意 orm,其关键在于 IUserStore 和 IRoleStore 两个接口,在 IUserStore 的实现中处理系统与数据库交互

  3. 给 MVC 添加了两个模型绑定器,一个用于处理分页,一个是处理实体。从请求中读取值并设置到相应模型,实体模型绑定器的工作是根据主键从数据库查询数据,然后赋值前端传过来的值。后面是 json 序列化配置,主要是命名规则设置、日期格式、序列化深度等

  4. 添加 swagger 文档设置,根据配置显示文档标题、遍历项目目录添加项目注释文件、最后就是配合 OAuth2.0 登录了,避免每次登陆的繁琐

  5. 跨域设置,可是设置 Policy,然后添加到控制器,这里为了测试方便,直接不写,在管道处设置全部放行

    app.UseCors(options => { options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials(); });
    
  6. 扫描控制器,生成菜单,将控制器上的权限操作码与菜单绑定,再设置到角色上,实现权限控制

  7. 统一响应结果,ApiResultFilterAttribute 加在控制器基类,将所有响应结果包装成统一的格式

  8. 异常拦截,请求过程中所有异常通过中间件 ApiExceptionMiddleware 拦截,返回统一的结果,以供前端展示友好结果

  9. 集成第三方登录协议,内置了 QQ、Github 登录,微信的由于申请不到就没做。默认支持 OpenID Connect

展望

  • 基本上,基础的就是这些了,未来可能增加日志审计、流式日志展示、应用重启、系统信息获取、配置在线修改等等可能比较有用的功能
  • 还有一些比较硬核的功能,比如千万级别数据流式导出到 csv 文件,在线数据迁移等等可能分出项目来做,先成型再完善

最后

  • Asp.Net Core3.0 已经发布了,Swagger5.x,IdentityServer3.x 都与之对应,都要升级,但是现在先不升级,把现有的整理好,算是对过去的努力的交代
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消