我的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之七-- 权限的更多相关文章
- 我的ORM汇总
MyOql是我写的ORM,目前仅支持 MSSql2005+ ,从2009年到今天,已使用过不少项目,之后会写 其它关系数据库的解析器: MySql,Sqlite,Oracle 等. 代码地址(最新版) ...
- Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM
产品清单: 1.整站源码,非编译版,方便进行业务的二次开发 2.通用模块与用户等基础数据的数据库脚本 3.bootstrap3.3.1 AceAdmin模板源码 4.easyui1.3.5源码 5.F ...
- ORM框架SQLAlchemy与权限管理系统的数据库设计
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM
更新 1.在使用的时候,特别是更新数据的时候,如果不知道哪里有问题,可以查看数据库 和 实体类 的字段,是否大小写一致,比如 name 和 Name 2.在使用Sqlsugar 的 CodeFirst ...
- python 全栈开发,Day111(客户管理之 编辑权限(二),Django表单集合Formset,ORM之limit_choices_to,构造家族结构)
昨日内容回顾 1. 权限系统的流程? 2. 权限的表有几个? 3. 技术点 中间件 session orm - 去重 - 去空 inclusion_tag filter 有序字典 settings配置 ...
- Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之七 || API项目整体搭建 6.2 轻量级ORM
本文梯子 本文3.0版本文章 前言 零.今天完成的蓝色部分 0.创建实体模型与数据库 1.实体模型 2.创建数据库 一.在 IRepository 层设计接口 二.在 Repository 层实现相应 ...
- MySQL与Oracle 差异比较之七用户权限
用户权限 编号 类别 ORACLE MYSQL 注释 1 创建用户 Create user user_name identified by user_password default tablespa ...
- 【Hive学习之七】Hive 运行方式&权限管理
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...
- Oracle学习笔记之七(用户管理、角色与权限、导入导出等)
下面这些基本的SQL语句应该熟悉,能够灵活运用.最好在不查资料的情况下,能够写出如下的任何代码. 1. 用户操作 --create user username identified by passwo ...
随机推荐
- CentOS下MySQL数据库安装
前辈们总是说,要边学边记录,要总结.所以,开始把每天学到的内容一点一点记录. 复杂的理论不懂,只会目前安装,安好后就开始玩咯! 1.在官网下载相应的rpm安装包 下载地址:http://dev.mys ...
- AIX 查看当前目录内最大的10个目录
du | sort -r n| head -n10 du 查看目录大小: srot 排序,-r 选择倒序,-n选项 看作数值排序(否则将作为字符排序): herd -n10 查看开通 ...
- 03-Swift常量&变量
什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用let来定义常量,定义之后不可以修改 使用var来定义变量,定义之后可以修改 常量和变量的基本使用 ...
- 对象的比较与排序:IComparable和IComparer接口
IComparable和ICompare 接口是.net framework 中比较对象的标准方式,这两个接口提供一个返回值类似(大于0 等于0 小于0)的比较方法,二者区别如下: . ICompar ...
- 如何去掉div滚动条
1.去掉横向滚动条 style="overflow-x:hidden" 2.去掉纵向滚动条 style="overflow-y:hidden" 3.同时去掉横向 ...
- js之数据类型
1.数组类型 var Array=new Array(); 长度可变 var Array=new Array(n); 长度为n的数组 var Array=new Array("A" ...
- springboot使用之四:错误页面404处理建议
每个项目可能都会遇到404,403,500等错误代码,如没有错误页面,则会给用户一个很不友好的界面,springboot项目同样也存在这个问题. 但在官方文档并没有相关配置信息,这就要求我们自己来实现 ...
- css清除浮动的方法汇总
这是在其他地方看到的一篇文章,汇总的不错,摘过来做个记录. 引用地址 : http://www.cnblogs.com/ForEvErNoME/p/3383539.html ------------- ...
- [UE4]Animation Techniques used in Paragon部分翻译及索引
视频地址:https://www.youtube.com/watch?v=1UOY-FMm-xo 主要内容:该视频由Paragon游戏制作者Laurent Delayen(Senior Program ...
- HDU5361 In Touch(线段树 + 最短路)
传送门 恰逢才做过VFK的A+B Problem,发现这道题也可以那样搞.区间连边的时候,我们就可以给那个区间在线段树对应的标号上连边. 线段树也可以不建出来,直接当做一个标号的合集,不占用内存,只用 ...