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

使用方式

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

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

我的ORM之七-- 权限的更多相关文章

  1. 我的ORM汇总

    MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...

  2. Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM

    产品清单: 1.整站源码,非编译版,方便进行业务的二次开发 2.通用模块与用户等基础数据的数据库脚本 3.bootstrap3.3.1 AceAdmin模板源码 4.easyui1.3.5源码 5.F ...

  3. ORM框架SQLAlchemy与权限管理系统的数据库设计

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...

  4. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM

    更新 1.在使用的时候,特别是更新数据的时候,如果不知道哪里有问题,可以查看数据库 和 实体类 的字段,是否大小写一致,比如 name 和 Name 2.在使用Sqlsugar 的 CodeFirst ...

  5. python 全栈开发,Day111(客户管理之 编辑权限(二),Django表单集合Formset,ORM之limit_choices_to,构造家族结构)

    昨日内容回顾 1. 权限系统的流程? 2. 权限的表有几个? 3. 技术点 中间件 session orm - 去重 - 去空 inclusion_tag filter 有序字典 settings配置 ...

  6. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM

    本文梯子 本文3.0版本文章 前言 零.今天完成的蓝色部分 0.创建实体模型与数据库 1.实体模型 2.创建数据库 一.在 IRepository 层设计接口 二.在 Repository 层实现相应 ...

  7. MySQL与Oracle 差异比较之七用户权限

    用户权限 编号 类别 ORACLE MYSQL 注释 1 创建用户 Create user user_name identified by user_password default tablespa ...

  8. 【Hive学习之七】Hive 运行方式&权限管理

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

  9. Oracle学习笔记之七(用户管理、角色与权限、导入导出等)

    下面这些基本的SQL语句应该熟悉,能够灵活运用.最好在不查资料的情况下,能够写出如下的任何代码. 1. 用户操作 --create user username identified by passwo ...

随机推荐

  1. django admin后台提示没有static样式相关的文件

    问题现象: 将 DEBUG = TEMPLATE_DEBUG = False 设置为False后,访问admin的管理后台,没有样式了.  解决办法: vim settings.py 确保有下面的这两 ...

  2. Codeforces 734E. Anton and Tree 搜索

    E. Anton and Tree time limit per test: 3 seconds memory limit per test :256 megabytes input:standard ...

  3. Sharepoint创建List

    (一)在一个环境下创建site 首先在sharepoint 2013 Central Administration中run administration --Application Managemen ...

  4. Dreamweaver 升级问题汇总

    Adobe的产品开始从CC (Creative Cloud) 开始转向云平台,CS将逐渐成为过去时.不过CC并不限制用户在同一台机器上同时使用CS和CC,这种策略估计要持续较长一段时间. If you ...

  5. rsync排除文件同步

    排除扩展名为log的文件 rsync -ave ssh --exclude '*.log' root@192.168.168.188:/website/abc.com/* /website/abc.c ...

  6. [转载]centos安装svn服务器

    一.安装Subversion #yum install subversion   1.查看安装时的文件产生情况,使用 rpm -ql subversion 2.卸载subversion:#yum re ...

  7. flex表格的使用

    Flex中表格使用datagrid+columns两个组件构成,dagagrid中定义了表格的外观属性和数据源Columns中定义了表格的列名还有对应的字段,方便从数据源取得数据 数据源的赋值一般有两 ...

  8. linux下配置nginx使用service nginx start 服务

    解压出来后执行 mkdir /var/tmp/nginx/client/ -pv 接下来我们简单的为它提供一个服务脚本吧! # vim  /etc/init.d/nginx 新建文件/etc/rc.d ...

  9. js 变量提升和函数提升原理

    关于js的变量,开始的时候我们都会被告知,变量声明应该在引用该变量之前.关于为什么要这样做呢,开始的时候本着会用就行的目的,也没去深究.不过后来经常会发现一些让人很费解的..姑且称为现象吧.先看一段代 ...

  10. Xcode 升级成Xcode 8 版本以后,出现 Signing for "sqlite3--test" requires a development team. 问题的解决

    升级xcode到8版本以后,工程文件会出现以下提示 解决办法就是,点击Team,添加自己的appid,然后选择自己的appid即可, 注意: 这里不需要开发者账号,自己的 apple id,就可以”: