我的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 , 用户所拥有的权限是该用户角色拥有权限的最大集合。

 

使用方式

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

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

posted @ 2015-05-26 15:03  NewSea  阅读(591)  评论(0编辑  收藏  举报