业务单据上下级权限控制实现
业务单据上下级权限控制实现
开发框架权限系统可控制到具体窗体及每个按钮,既:控制界面和按钮。 但有这样一个特殊需求:资料数据、如业务单据要按组织机构的上下级权限控制, 如下图所示:
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(2000)的字段,用于存储制单人的下级名单。 如制单人U1的Owners字段的值为:,A,B,C, 表示三个授权名单,当A,B,C三者任一用户登录系统后打开SO业务单据, 按照日期条件查询到U1创建的单据。 假设用户A登录,要修改U1的单据,场景设计与流程:
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)
C# Code:
//当前业务单据的上下级关系 private BusinessOwnerRelation _BusinessOwners = null; /// <summary> /// 检查制单人与当前用户是否存在上下级关系 /// </summary> /// <param name="currentBusinessRow">当前单据主表记录</param> /// <returns></returns> 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
C# Code:
/// <summary> /// 当前业务窗体已检查的制单人列表. /// 当前用户是制单人的下级关系则能访问单据. /// </summary> public class BusinessOwnerRelation { //当前业务窗体已检查的制单人列表 private Hashtable _CheckedOwners; public BusinessOwnerRelation() { _CheckedOwners = new Hashtable(); } /// <summary> /// 检查制单人与当前用户是否存在上下级关系. /// </summary> /// <param name="businessOwner">制单人</param> /// <param name="currentUser">当前用户</param> /// <returns></returns> 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
扫一扫加微信
参考文档:
高级版主要包含库存、采购和销售三个业务模块,是完整的实现么? 开发框架支持三级菜单及权限控制,有图详解 使用触发器控制用户删除业务往来中使用的基础资料 现阶段提供的权限、基础业务(权限、销售、采购、财务等)是否满足需求? 新增组织机构通用界面,并支持上下级权限控制 Winform快速开发框架之权限系统设计(3) - 功能按钮权限控制基本原理 Winform界面的功能按钮同等权限控制|C/S框架网 组织机构上下级同级用户以及数据权限控制|C/S框架网 Winform界面权限控制原理|C/S框架网 CSFramework.WebApi令牌管理器(Token Provider)实现添加、删除、刷新令牌过期控制 C/S开发框架新功能:批量更新业务单据的业务员、制单人制表人 Winform软件快速开发平台 - 关于数据权限,表格列权限控制两种解决方案 组织机构特殊权限数据权限 - 控制用户查看同级或子级的单据数据 模块主窗体怎样控制自定义按钮的权限 窗体的自定义按钮权限控制-扩展权限按钮详解
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |