改进版本的精确数据权限定义和实现

由于工程实现上的某些小问题,为了达到方便实现如图效果,对数据结构做了一点点的调整。

新的数据结构如下图:

第一个图片的数据源视图:

IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'RoleDataPermit') AND OBJECTPROPERTY(id, N'ISVIEW') = 1)
DROP VIEW RoleDataPermit
GO

/*****视图:查询所有角色的数据权限*****/

CREATE VIEW RoleDataPermit
AS

with
List as (
select distinct
       G.ID as DataId,
       null as ParentId,
       PM.RoleId,
       0 as Action,
       G.Name as 模块,
       null as 读写权限
from SYS_ModuleGroup G
join SYS_Module M on M.ModuleGroupId = G.ID
join SYS_RolePerm_Module PM on PM.ModuleId = M.ID
left join SYS_RolePerm_Data PD on PD.PermId = PM.ID
where PM.Permission >= 0
  or PD.ID is not null

union all
select M.ID as DataId,
       case when M.ModuleGroupId is null then M.ParentId else M.ModuleGroupId end as ParentId,
       PM.RoleId,
       1 as Action,
       M.ApplicationName as 模块,
       null as 读写权限
from SYS_Module M
join SYS_RolePerm_Module PM on PM.ModuleId = M.ID
where PM.Permission >= 0

union all
select PM.ID as DataId,
       PM.ModuleId as ParentId,
       PM.RoleId,
       2 as Action,
       '无归属数据' as 模块,
       case when PM.Permission = 0 then '只读' else '读写' end as 读写权限
from SYS_RolePerm_Module PM
where PM.Permission >= 0

union all
select PD.ID as DataId,
       M.ModuleId as ParentId,
       M.RoleId,
       PD.Mode + 3 as Action,
       case PD.Mode when 0 then '仅本人' when 1 then '仅本部门' when 2 then '本部门所有' when 3 then '本机构所有' when 4 then '根机构所有' else '自定义' end as 模块,
       case when PD.Permission = 0 and PD.Mode < 5 then '只读' when PD.Permission = 1 and PD.Mode < 5 then '读写' else null end as 读写权限
from SYS_RolePerm_Data PD
join SYS_RolePerm_Module M on M.ID = PD.PermId

union all
select PC.ID as DataId,
       PC.PermDataId as ParentId,
       PM.RoleId,
       9 as Action,
       O.FullName as 模块,
       case when PC.Permission = 0 then '只读' else '读写' end as 读写权限
from SYS_RolePerm_Module PM
join SYS_RolePerm_Data PD on PD.PermId = PM.ID
  and PD.Mode = 5
join SYS_RolePerm_Custom PC on PC.PermDataId = PD.ID
  and PC.OrgId is not null
join SYS_Organization O on O.ID = PC.OrgId

union all
select PC.ID as DataId,
       PC.PermDataId as ParentId,
       PM.RoleId,
       10 as Action,
       U.Name + '(' + U.LoginName + ')' as 模块,
       case when PC.Permission = 0 then '只读' else '读写' end as 读写权限
from SYS_RolePerm_Module PM
join SYS_RolePerm_Data PD on PD.PermId = PM.ID
  and PD.Mode = 5
join SYS_RolePerm_Custom PC on PC.PermDataId = PD.ID
  and PC.UserId is not null
join SYS_User U on U.ID = PC.UserId
)

select newid() as ID, * from List

GO
时间: 2024-10-24 18:03:29

改进版本的精确数据权限定义和实现的相关文章

改进版本号的精确数据权限定义和实现

因为project实现上的某些小问题.为了达到方便实现如图效果,对数据结构做了一点点的调整. 新的数据结构例如以下图: 第一个图片的数据源视图: IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'RoleDataPermit') AND OBJECTPROPERTY(id, N'ISVIEW') = 1) DROP VIEW RoleDataPermit GO /*****视图:查询全部角色的数据权限*****/ CREATE

数据权限添加

1.功能权限.数据权限定义..授权对象定义 注意:1)必须有排序列,否则后面报错 2)数据库都需从base库订阅权限 3)必须包含ID唯一标识列,否则无法进行明晰授权 4)搜索关键字标识有长度限制 原文地址:https://www.cnblogs.com/gao109214/p/11102407.html

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 数据权限增强、范围权限增强

并不是不想做B\S的管理工具,只是精力实在不够,由于用户权限管理组件是基础组件.所以C\S的也无妨,不会有几个人在乎Oracle,SQLServer是否不b\s的,注重的是功能性能,请大家不要纠结与是否B\S还是C\S上. 实现的方法.设计的界面.数据库结构的设计.底层DLL方法的函数调用,都可以参考,毕竟自己全部实现一个,耗费太多精力,不如拿过来用用参考,按自己的需要修改几下就可以用了,省心省事省力,腰不疼腿不酸,没必要浪费生命. 由于公司的组织机构庞大.网点非常多,所以数据权限的设置也非常复

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - .NET商业化成品成熟各种数据权限的需求对应例子代码

还是我上次提出的那个问题问题:假设一个订单表,1.角色A可以看自己的2.角色B可以看工作组的3.角色C可以看金额是1000元以下的(自定义条件是否可行?如果可以,请详细说明)4.角色D可以看整个部门的5.角色E可以看整个分公司的6.角色F可以看各分子公司的 参考代码如下:代码量会非常小,而且根本不需要写6个函数的,其实就按钮3的方法其实可以同时满足6个需求的 using System; using System.Collections.Generic; using System.Componen

通用权限管理系统数据权限设置功能解析

在权限管理系统中,数据权限是比较难的,在我们通用权限系统中,数据权限指的是用户基于某个权限域对某些基础数据的操作权限,如上图,公司管理这个菜单被定义是数据权限,表示某些人在公司管理是可指定访问哪些基础数据,这个要与应用结合.如下图,可以限制该9999xudeng003用户在公司管理页面只能管理其中的几个公司. 目前基于用户的数据权限BS的管理功能已完成,这个是权限系统最难开发的一部分. 下面是MVC控制器调的通用权限管理系统底层的方法: //---------------------------

DRF 版本、认证、权限、限制、解析器和渲染器

目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2.权限 局部配置 3.权限 全局配置 四.DRF之限制 1.使用自定义限制类 1.1自定义一个限制类 1.2限制 局部配置 1.3限制 全局配置 2.使用内置限制类 2.1定义内置限制类 2.2全局配置 五.DRF之分页 1.为什么要使用分页 2.DRF使用分页器 2.1分页模式 2.2全局配置 2.

条码扫描二维码扫描—ZXing android 改进版本

看了Vurtexゞ. 文章<[Android实例] 条码扫描二维码扫描——ZXing android 源码简化 (附:支持中文) >的基础上对代码进行了修改 1.增加了将代码嵌套入自己工程后传值的办法(初学,如果有更好的方法也希望告诉我,先谢谢了) 2.扫码界面进行了处理(初步实现了现有某些软件的样子,至于长的像谁就不说了) //画四个角的代码<br>paint.setColor(frameColor); canvas.drawRect(15 + frame.left, 15 +

关于数据权限设计的一些想法

序言 在各种系统中,要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门能够方便而且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.虽然企业中各个单元的工作流程有所不同,处理的数据对象也有所不同,但是在组织结构.信息的处理方式上具有很多相同的地方,这就为设计数据对象的权限控制提供了一个抽象基础.数据权限的控制不同于一般的功能权限的控制,一般的功能权限指的是某个用户.角色或者是某个用户组能不能操作某种功能.而数据权限指的是某个用户.角色或者是某个用户组对某个数据对象的

JAVA 数据权限设计

数据权限设计 序言 在各种系统中,要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门能够方便而且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.虽然企业中各个单元的工作流程有所不同,处理的数据对象也有所不同,但是在组织结构.信息的处理方式上具有很多相同的地方,这就为设计数据对象的权限控制提供了一个抽象基础.数据权限的控制不同于一般的功能权限的控制,一般的功能权限指的是某个用户.角色或者是某个用户组能不能操作某种功能.而数据权限指的是某个用户.角色或者是某个用户组对