zoukankan      html  css  js  c++  java
  • 我的ORM之七-- 权限

    我的ORM索引

    权限范围

    权限可以控制以下部分:

    • 页面 
    • 按钮
    • 表格列 (未完成)
    • 菜单表的行

    其中:

    页面权限,需要在程序请求之前进行判断。

    按钮权限,表格列权限,需要在请求页面之后,通过JavaScript,动态隐藏,如果认为不安全,则再对Post的URL进行权限设置。(web.config/appSetting 设置 TestPostPower 为 true )

    菜单表的行,我叫它 行集权限,在进行 ORM 查询时,进行自动过滤,即,查询条件后面追加 id in ( 1,2,3,4)。

    设置当前执行上下文

    通过使用 MyOqlConfigScope 设置当前线程的上下文,可以控制在当前范围作用域下使用指定权限。

    using (var conf = new MyOqlConfigScope(ReConfigEnum.SkipPower))
    {
          //不进行权限过滤,可劲查。
          return usr;
    }
    ReConfigEnums是一个MyOql内部枚举,定义如下:
       /// <summary>
        /// 配置MyOql作用域
        /// </summary>
        [Flags]
        public enum ReConfigEnum
        {
            /// <summary>
            /// 忽略权限验证
            /// </summary>
            SkipPower = 0x1,
    
            /// <summary>
            /// 忽略使用缓存
            /// </summary>
            SkipCache = 0x2,
    
            /// <summary>
            /// 忽略Log
            /// </summary>
            SkipLog = 0x4,
    
            /// <summary>
            /// 使用DbName,不进行转义
            /// </summary>
            UseDbName = 0x8,
    
            ///// <summary>
            ///// 不使用列别名
            ///// </summary>
            //IgnoreDbAliasName = 0x16,
    
            /// <summary>
            /// 脏读模式,不读取未提交信息。
            /// </summary>
            ReadPast = 0x20,
    
            /// <summary>
            /// 脏读模式,读取未提交信息
            /// </summary>
            NoLock = 0x40,
    
            /// <summary>
            /// 默认的等待事务完成模式。
            /// </summary>
            WaitLock = 0x80,
    
            /// <summary>
            /// 截断长度存入数据库(插入,更新时)
            /// </summary>
            CutLength2Db = 0x100,
    
            /// <summary>
            /// 使用显式ID
            /// </summary>
            IdentityInsert = 0x1000,
        }

    项目实现

    代码及Demo参考示例项目。

    数据库表 S_PowerAction 页面权限元数据,包含以下列: 

    • ID
    • Area 对应Url的第一部分,翻译为 子系统,使业务人员更容易理解
    • Controller 对应Url的第二部分,翻译为 模块
    • Action 对应Url的第三部分,翻译为页面
    • Name  页面的中文表示。

    其中 Area,Controller,Action 也对应了 Mvc 的路由,通过三级URL进行权限过滤。这样的好处是,即便是进行了多个URL重写,也绕不过权限校验机制。对于没有定义的URL,则不进行权限校验。

    权限还依赖以下表:

    • 用户表 P_User
    • 角色表 P_SystemRole ,权限是设置到角色的, 该表包含权限字表示
    • 用户角色关系表 P_UserRole , 用户所拥有的权限是该用户角色拥有权限的最大集合。

    使用方式

    • 创建用户
    • 创建角色
    • 创建用户角色关系
    • 创建 页面权限元数据 
    • 创建 按钮权限元数据
    • 把 页面权限设置到角色上
    • 把 按钮权限设置到角色上

    重新登录可以观察权限效果。

  • 相关阅读:
    java的原子类 AtomicInteger 实现原理是什么?
    Tomcat性能调优
    JVM性能调优
    vue下载和上传excle数据文件,解析excel文件数据并存在数据库中
    07----popo up 弹窗
    06----fiter
    05 ---批量操作
    04
    stark组件03
    stack组件03
  • 原文地址:https://www.cnblogs.com/newsea/p/4530646.html
Copyright © 2011-2022 走看看