业务单据上下级权限控制实现

开发框架权限管理可控制到具体窗体及每个按钮(功能点), 但有些特别的需求是要求某些机密文件仅开放给指定的名单访问, 实际上就是业务单据的上下级权限控制, 如下图所示:

U1用户的下级名单, A,B,C用户可访问或操作U1创建的单据

U1用户有个字段存储下级名单,简单些就用字符串存储A,B,C三个用户名,中间用逗号分开.(也可设计一张明细表存储)

新增字段 Owners , 记录用户的下级名单,用于做单据上下级权限控制.

首先理清几个概念:

1. 制单人:开具单据的人员,单据创建人, 即: Business/Document Owner

2. 当前用户:当前登录系统的用户,即:Current User

3. 业务单据:如销售订单(Sales Order SO), 开发框架内以SO作为开发模板. 在SO的查询窗体定义查询条件一次性可取1,2,3..n张单据.

具体实现:

制单人指定某些用户可查看或修改本人的单据, 制单人与用户构成一对多关系(1--->n). 以最简单的方式设计在用户表增加一个Owners varchar(250)的字段用于存储制单人的下级名单, 如: 制单人U1的Owners字段的值为:,A,B,C, 表示三个授权名单. 当A,B,C三者任一用户登录系统后打开SO业务单据, 按照日期条件查询到U1创建的单据,

假设用户A登录修改U1的单据控制流程是:

1.取当前单据的制单人(U1) -->

2.取U1的Owners字段的值(授权名单) -->

3.用名单与当前用户对比是否存在-->

4.如果存在可修改单据,不存在则提示警告消息.

"修改"按钮内编写权限控制代码:

C# Code:

public override void DoEdit(IButtonInfo sender)

{

this.AssertFocusedRow();

DataRow row = _SummaryView.GetDataRow(_SummaryView.FocusedRowHandle);

//要处理单据的上下级权限控制

if (_BLL.CheckOwnerRelation(row) == false)

{

Msg.Warning("您不能修改他人创建的单据!");

return;

}

//.... 略 ....

}

//来源:C/S框架网(www.csframework.com)

SO 的BLL业务逻辑层的代码:

C# Code:

//当前业务单据的上下级关系

private BusinessOwnerRelation _BusinessOwners = null;

///

///检查制单人与当前用户是否存在上下级关系

///

///当前单据主表记录

///

public bool CheckOwnerRelation(DataRow currentBusinessRow)

{

string login = Loginer.CurrentUser.Account;//当前用户

string owner = ConvertEx.ToString(currentBusinessRow[BusinessCommonFields.CreatedBy]);//取制单人

//如制单人不是当前登录用户, 检查单据的上下级权限控制

//当前用户是制单人的下级关系则拥有当前单据的所有权限.

if (owner.ToUpper() != login.ToUpper())

{

if (_BusinessOwners == null) _BusinessOwners = new BusinessOwnerRelation();

return _BusinessOwners.CheckOwnerRelation(owner, login);

}

return true;

}

//来源:C/S框架网(www.csframework.com) QQ:1980854898

BusinessOwnerRelation 类

C# Code:

///

///当前业务窗体已检查的制单人列表.

///当前用户是制单人的下级关系则能访问单据.

///

public class BusinessOwnerRelation

{

//当前业务窗体已检查的制单人列表

private Hashtable _CheckedOwners;

public BusinessOwnerRelation()

{

_CheckedOwners = new Hashtable();

}

///

///检查制单人与当前用户是否存在上下级关系.

///

///制单人

///当前用户

///

public bool CheckOwnerRelation(string businessOwner, string currentUser)

{

string owners;//制单人的下级用户成员

if (_CheckedOwners.ContainsKey(businessOwner))

owners = _CheckedOwners[businessOwner].ToString();

else

{

owners = CommonData.GetBusinessOwner(businessOwner); //从用户表取制单人的的下一级名单

_CheckedOwners.Add(businessOwner, owners); //保存起来,下次检查不需要再查数据

}

//User表的Authorty字段存储多个用户名,以逗号分开.

return owners.IndexOf(currentUser) > 0;

}

}

//来源:C/S框架网(www.csframework.com) QQ:1980854898

php 上级控制下级权限,业务单据上下级权限控制实现相关推荐

  1. 自动生成业务单据流水号方案

    我们在开发管理软件的时候,常常遇到流水号(单据号.登记号)自动生成.控制和管理的问题.由于流水号 具有唯一性和连续性的特点,在实际开发过程中若处理不好,会产生流水号重复及断号的问题.特别是多个并发用 ...

  2. 权限控制_多租户系统设计之权限控制

    概述 业务层面的隔离是用户可以直接感知的隔离,也是多租户系统必须实现的隔离,在上篇文章中提到的数据隔离主要是针对数据存储层面而言的,用户一般感知不到,所以如"基于数据行的租户唯一标识&quo ...

  3. 上级对下级用通知合适吗_切记!这几句话千万不要对领导说

    公文精选致力于为广大公文写作者提供一个开放的交流平台.分享素材供大家学习参考,关注本号获取更多公文写作素材.优质范文.写作技巧.职场规则等!如果您正在被写公文困扰,可以私信我哦,海量素材与君分享! 也 ...

  4. 下级对上级认可应该用什么词_下级对上级的成语-上级听取下级的词语-下级称赞上级领导的词语...

    表示上级查看下级的词语有那些 视察 求形容上下级良好关系的词语 齐心协力 同心同德 荣辱与共 同舟共济 打成一片 亲民 上级读下级的东西用什幺词语 拆代行 [读音]:dài chāi dài xíng ...

  5. 41 SD配置-销售凭证设置-销售单据到销售单据的复制控制

    业务背景:销售单据到销售单据的复制控制 事务码:VTAA SPRO路径:SPRO->销售和分销->销售->维护销售凭证的复制控制 第1步,SPRO进入 第2步,选择"复制控 ...

  6. Linux系列教程——Linux基本权限、Linux特殊权限、LinuxACL控制、Linux输入输出

    文章目录 1 Linux基本权限 1.权限基本概述 1.什么是权限? 2.为什么要有权限? 3.权限与用户之间的关系? 4.权限中的rwx分别代表什么含义? 2.权限设置示例 1.为什么要设定权限,我 ...

  7. 实现权限控制_SpringCloud 微服务实现数据权限控制

    前章讲了如何进行用户权限验证<SpringCloud下的用户鉴权方案>,它是微服务下统一资源访问权限的控制,就像一道墙保护着SpringCloud集群下的各个业务应用服务.而本章要讲的是权 ...

  8. Java权限降级_简单值控制权限系统的改进

    需求变更--使权限控制值能动态调整 上一讲中简单权限系统的权限控制值是写在XML配置文件中的,如果需要调整这些值还需要修改配置文件,对于Web系统来说,此后还需要重新打包,测试和发布.这样无法实现动态 ...

  9. asp.net core mvc权限控制:在视图中控制操作权限

    在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式 ...

最新文章

  1. 当Python遇上朱茵、迪丽热巴、林志玲、王祖贤等众多美女
  2. 爬虫之selenium控制浏览器执行js代码
  3. 前端入门:快速开发基于 HTML5 网络拓扑图应用
  4. python3代码转python2_Python2代码转成Python3代码
  5. [原创][连载].基于SOPC的简易数码相框 - Nios II SBTE部分(软件部分) - 从SD卡内读取图片文件,然后显示在TFT-LCD上...
  6. 后台开发经典书籍--Linux多线程服务端编程:使用muduo C++网络库
  7. [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
  8. Sky Line 与 ArcEngine的粘合剂 Composite UI AB?
  9. 微信小程序 request请求封装
  10. jpa mysql存储过程_(原)springbootjpa调用服务器mysql数据库的存储过程方法-Go语言中文社区...
  11. html还原ui,前端高度还原设计稿(字体篇)
  12. Java编写程序将数据存入Kafka中
  13. MySQL高级-SQL优化步骤
  14. js中函数参数值传递和引用传递
  15. 马斯克造“超级WiFi”这事儿未必能成
  16. GeekOS课程设计-project1
  17. 更改MAC终端显示的主机名
  18. 14.6.211213163AWVS扫描器破解流程
  19. Windows下DOS操作系统(cmd)详解
  20. C语言实现哈夫曼压缩与解压缩的实现以及读取哈夫曼编码 万文长书,绝对详细哦

热门文章

  1. Nexus 5X解锁bootloader+ROOT
  2. 简单理解科学的证实与证伪
  3. win8系统wifi链接不上服务器,win8无线网络连接不上怎么解决
  4. gameloft java 下载_gameloft所有游戏
  5. 从零开始编写网络游戏--基础篇(1)
  6. python单例模式数据库连接失败_Python中单例模式总结
  7. 关于对南方cass的看法
  8. Win11恢复经典风格右键菜单
  9. 通过bak文件还原数据库到SQLsever2008R2
  10. 关于端口137、138、139、445的扫描探测原理