我的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 ...
随机推荐
- iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
RCTViewManager and RCTUIManager 1. RCTViewManager 1.1 RCTViewManager 实现了接口RCTBridgeModule @interface ...
- STL学习笔记
简介 STL(Standard Template Library),即标准模版库,涵盖了常用的数据结构和算法,并具有跨平台的特点.STL是C++标准函数库的一部分,如下图所示: STL含有容器.算法和 ...
- 图的割点 | | jzoj【P1230】 | | gdoi | |备用交换机
写在前面:我真的不知道图的割点是什么.... 看见ftp图论专题里面有个dfnlow的一个文档,于是怀着好奇的心情打开了这个罪恶的word文档,,然后就开始漫长的P1230的征讨战.... 图的割点是 ...
- Spark简介
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点:但不同于MapReduce的是 ...
- jquery制作弹出层带遮罩效果,点击阴影部分层消失
jquery制作弹出层带遮罩效果,点击阴影部分层消失. 整体还是比较简单的. HTML代码很简单 <a href="#" class="big-link" ...
- 修改win7电脑中所有文件的默认查看方式
怎么修改win7电脑中所有文件的默认查看方式 如何设置才可以得到如下的效果:比如说打开一个盘符或者一个文件夹,进行设置之后,这个盘符里或者这个文件夹下的所有子文件夹.所有子文件夹里的所有文件都以“ ...
- iOS 单例模式
主要用于做应用程序的资源共享控制.用途很多⋯⋯ 实质为,单例是在程序声明周期里 有且仅有 被实例化过一次的类.为确保实例化的唯一,利用类的 类(static)方法来生成和访问对象. 至此,你便可以在程 ...
- svn 在linux 下的一些常用命令
最近在Linux系统下玩一些svn的东西,感觉脑袋很乱, 于是整理了一下一些初学者必须弄明白的基本命令: 1. svn --version: 查看Linux系统下的svn client版本. Clie ...
- ngixn编译安装时,pcre的处理
nginx编译时pcre会提示找不到libpcre.so.1 ./configure --hlep --without-pcre disable PCRE library usage 不使用pcr ...
- #笔记# CSS工作流
目录 明确代码规范 CSS Reset 关于前缀 浮动闭合 CSS的前处理器(Preprocessor)和后处理器(Postprocessor) 明确代码规范 目的是确保跨平台协作多人开发的代码显示界 ...