zoukankan      html  css  js  c++  java
  • 手把手撸套框架-Victory框架1.1 详解

    目录

    上一篇博客 Victory框架1.0 详解  有说道,1.0的使用过程中出现不少缺点,比如菜单不能折叠,权限没有权限组等等。

    所以,我还是抽出时间在下班后,回到我的小黑屋里 完成了1.1的升级。 相比1.0 ,这次的1.1 有的大范围的改进。

     Victory1.1 源码: https://github.com/demon28/Victory.Template1.1

    核心的改进还是 RBAC-1, 这个在这篇文章中有写到: 手把手撸套框架-权限系统设计。 我之所以,单独保存1.0 也是因为1.0 是RBAC-0的5表设计,非常经典。

    Victory 1.1 是RBAC-1 数了下有16张表,比较庞大。 但是功能也多了很多,比如 权限控制菜单,权限控制 用户组, 给用户组授权等。

    大部分的理念和1.0没什么区别。这里说一下 上一篇讲解1.0 没有收到的几个点:

    1,AppSetting.json 文件。 这个文件是必须要讲的:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
    
      "ConnectionStrings": {
        "DB": "EnvironDatabase",   //当前使用数据库
        "IsEncrypt": "false",      //是否使用加密字符串
        "ProductDatabase": "Data Source=120.77.211.84;Initial Catalog=YH.EAM; User Id=sa;Password=admin(123);Integrated Security=True;Pooling=true;Min Pool Size=1",   //生产环境
        "EnvironDatabase": "Data Source=134.175.23.180;Initial Catalog=YH.VictoryTemp; User Id=souy;Password=CH2DCV3P",                                               //预投产环境
        "DevelopDatabase": "O0yaiWNz+6MJ7tRdbE17BfLpHn8tWZ6jJ3aWScQ/a4WUdgAY6JY8mBWlmmaI069iWMfkEvNzD8ivY2wpY7wNArTjeBDKSwyVXnacduywF2E9yKUsKTnaazb0Cyhz40K4"        //开发环境
      },
    
      "IgnoreAuthRight": "false",    //是否忽略全局权限检查
    
      "IsSetDefautlRole": "false",  //是否给新登录的用户给一个默认用户权限
    
      "IgnoreApiFilter": "false",   //是否忽略API请求时的 参数签名
    
      "IsExceptionFilter": "true",   //是否取消全局异常捕捉
    
      "Jwt": {                     //JWT 信息
        "ApiKey": "58b59b3ae5d0ec0629950ebdd4dabe39",
        "Issuer": "Near",
        "Audience": "VueApp"
      }
    }

    数据库我提倡开发一个项目必须有部署三个环境,一个是开发环境,可以公司内部拿一台服务器做一个局域网,这样就不用每个同事都装一个数据库服务端,大家开发过程中装一个客户端就行了。

    然后项目 开发到第一个版本上线的时候,需要部署一个预投产环境,预投产环境与真实投产环境数据保持一致,这个是专门给测试人员使用的,无论是黑盒测试 还是 白盒测试,有个预投产则方便很多,

    则不至于每次要测什么,都跑到真实环境上去测试。

    最后投产环境就没什么好说的, 投产环境的数据库,不建议和应用放在同一台服务器上,放同一个内网的 数据库服务器即可,避免遇到类似中勒索病毒的情况。

    这里有个值得一提的是,IsEncrypt,为true 的话标识,这个字符串是加密的,如果是加密的读取字符串的时候 需要解密,这个加解密的方式用的是最基本的AES,AES是需要key的,这个地方key是当前电脑的CPUID

    所以,本机环境开发没问题,放到服务器上则要重新用工具加密字符串,否则key不对解密不了,或者说加密的也不对,Cpu换了嘛。配备了工具:https://github.com/demon28/Victory.ToolBox  用工具加密就行了。

    下面几个配置,我都加上注释了,IgnoreAuthRight,会用的比较多,这个为true的时候,全局忽略权限检查,也就等于当前用户有了超级用户的权限。

    2,contorller的基类。

    using Microsoft.AspNetCore.Mvc;
    
    using Microsoft.AspNetCore.Mvc.Filters;
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
    using System;
    using System.Collections.Generic;
    
    namespace Victory.Core.Controller
    {
        public class TopControllerBase : Microsoft.AspNetCore.Mvc.Controller
        {
            /// <summary>
            /// 不打nonaction 会被当成Action,在Swagger的时候会报错 
            /// </summary>
            /// <param name="msg"></param>
            /// <returns></returns>
    
            [NonAction]
            public JsonResult FailMessage(string msg = "失败")
            {
                return Json(new { Success = false, Code = 0, Message = msg });
            }
            [NonAction]
            public JsonResult SuccessMessage(string msg = "成功")
            {
                return Json(new { Success = true, Code = 1, Message = msg });
            }
    
            [NonAction]
            public JsonResult SuccessResult<T>(T t, string msg = "成功")
            {
    
                return Json(new { Success = true, Code = 1, Message = msg, Content = t });
    
            }
            [NonAction]
            public JsonResult SuccessResultList<T>(List<T> list, Models.PageModel page, string msg = "成功")
            {
                
                return Json(new { Success = true, Code = 1, Message = msg, PageIndex = page.PageIndex, PageSize = page.PageSize, TotalCount = page.TotalCount, TotalPage = page.ToTalPage, Content = list });
            }
    
            [NonAction]
            public JsonResult SuccessResultList<T>(List<T> list, string msg = "成功")
            {
    
                return Json(new { Success = true, Code = 1, Message = msg, Content = list });
            }
    
        }
    }

    这个源码在Victory.Core 里面,这是一个工具集,其实我现在有点后悔把 这个基类放到 工具集中,但是现在已经用起来了,我又不好去改,如果去掉的话,已经在开发的项目,如果升级这个程序集则会有问题。

    源码在这里:https://github.com/demon28/Victory.Core

    这个基类主要的作用也就是 序列化 json。 还是比较好用的。

    ==================================华丽的分割线==================================

    Victroy 对比从1.0 演化到1.1 ,重点只是解决了 权限问题,将权限更加放大了,这个是在使用过程中被吐槽最多的地方。

    但是并没有解决我 难受的痛点,  我最难受的痛点 还是 不够纯粹。 里面 又混合,Vue,Jquery,Element-ui,Bootstarp 以及各种jq插件。

    但是 我说过这是最后一个 1.X版本, 2.0的话,我会基于Vue-Element-admin 做前后端分离,这里 特地要保留1.1 也是因为 1.x是 前后端不分离的。

    我始终绕不过这坎,觉得就一个程序员 还要分离前后端 有点多余。还不如 一个VS全部解决呢, 只奈何VS 对Vue 的支持不够好,还要开Vscode 

    就这一点来说,我还更愿意用1.x 开发项目。另外1.1 还有一个大问题, 还是在权限上,这个都逼的我想再推进一个1.2版本。想了想还是算了。

    在权限设计的时候。

    我觉得 Tright_power 有点对于,  直接用 角色表 去关联各个数据即可。这里完全可以省去两张表,另外Tright_Power_Element这个表也多余,

    事实上说明 照搬 RBAC-1 还是要做精简的, 想了想, 文件表 也要去掉,等我有那闲心思 再优化一般吧,现在我还是坚持1.1是 1.x 的最后一个版本。

      Victory1.1 源码: https://github.com/demon28/Victory.Template1.1

      代码生成器:https://github.com/demon28/Victory.CodeGenerator

      加密工具箱:https://github.com/demon28/Victory.ToolBox

     Victory 工具集:https://github.com/demon28/Victory.Core

    后记:6月1-10月1 经历了四个月,已完全恢复编码能力。新入职公司已经转正。 并且得到同事们认可,国庆节后转岗做项目经理,

    感谢四个月来努力的自己。

  • 相关阅读:
    System.InvalidOperationException: 找到多个与名为“Home”的控制器匹配的类型。
    MemoryStream和FileStream
    js的eval函数解析后台返回的json数据时为什加上圆括号eval("("+data+")"),而HTML页面定义的数据不用
    字符串转数组和数组转字符串
    npoi导入--从varchar数据类型到datetime数据类型转换产生一个超出范围的值问题
    IIS配置 Web部署 svg/woff/woff2字体 404错误
    委托由浅入深学习
    JavaScriptSerializer返回一条Json,页面获取值问题,数据绑定
    一文总结 CPU 基本知识
    Spring原理只要看这篇文章就够了
  • 原文地址:https://www.cnblogs.com/demon28/p/13766451.html
Copyright © 2011-2022 走看看