我的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 ...
随机推荐
- mysql日志 解析
mysql有4种不同的日志,分别是二进制日志,查询日志,慢查询日志和错误日志,这些日记记录着数据库工作的方方面面,可以帮助我们了解数据库的不同方面的踪迹,下面先介绍二进制日志的作用和使用方法,并利用二 ...
- 设计模式:Context模式
作者:吴香伟 发表于 2014/09/12 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 Ceph实现中使用了大量派生于Context抽象类的子类,用法简单却很 ...
- 用命令查看Mysql中数据库、表的空间大小
要想知道每个数据库的大小的话,步骤如下:1.进入information_schema 数据库(存放了其他的数据库的信息)use information_schema;2.查询所有数据的大小:selec ...
- Jquery一般操作归纳
一.DOM操作分类 1.DOM Core getElement(s)获得元素 2.HTML-DOM document.对象/操作标签的属性 3.CSS-DOM ...
- 证书过期-->app审核提示90034证书错误
1.证书过期问题,去钥匙串中删除过期证书,然后新下载一个证书,重新添加,注:一定要把所有过期证书全部删除,如果不显示则点击钥匙串-->显示过期证书 然后下载新证书:https://develop ...
- easyui datagrid加载json
服务端: string pseries = context.Request["ajaxSearch"].ToString().Trim(); var jsonMap = new ...
- rspec中的shared_examples与shared_context有什么不同
What is the real difference between shared_examples and shared_context ? My observations : I can tes ...
- python基础第四天(1)
冒泡算法--算法 需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序 思路:相邻两个值进行比较,将较大的值放在右侧,依次比较! 第一步 li = [13, 22, 6, 99 ...
- javascript鸭式辩型法实现接口
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- HTML流动布局各种宽度自适应
<!DOCTYPE html> <html lang="en"> <style> html,body{ padding: 0;margin: 0 ...