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


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


开发框架权限系统可控制到具体窗体及每个按钮,既:控制界面和按钮。

但有这样一个特殊需求:资料数据、如业务单据要按组织机构的上下级权限控制, 如下图所示:


贴图图片


解析:


U1用户的下级有 A,B,C 3个用户,可访问或操作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(2000)的字段,用于存储制单人的下级名单。

如制单人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;

/// <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



BusinessOwnerRelation 类


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


 

C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:《CS框架V2.2-3.0数据表结构说明文档》.doc
下一篇:基类窗体处理按回车键自动跳到下一输入控件
评论列表

发表评论

评论内容
昵称:
关联文章

业务单据上下级权限控制实现
新增组织机构通用界面,并支持上下级权限控制
组织机构上下级同级用户以及数据权限控制|C/S框架网
组织机构特殊权限数据权限 - 控制用户查看同级或子级的单据数据
四.业务单据窗体开发步骤-业务单据窗体-C/S快速开发框架-标准版V2.3
Winform快速开发框架之权限系统设计(3) - 功能按钮权限控制基本原理
C/S快速开发框架旗舰版V5.1 - 业务单据窗体开发步骤
Winform开发框架 - 特殊权限控制(扩展权限和自定义按钮功能)
Web方法(WebMethod)服务端权限控制
Winform软件快速开发平台 - 关于数据权限,表格列权限控制两种解决方案
丰富的界面窗体权限控制、按钮权限、扩展权限、角色权限 - Winform蝇量框架
指定单据号码自动打开业务单据窗体并显示数据
CS开发框架 - 业务单据自动生成功能设计(原)
Winform界面权限控制原理|C/S框架网
C# Winform 开发框架 - 业务单据附件管理解决方案(原)
什么是业务单据?什么是业务数据?什么是业务窗体?
现阶段提供的权限、基础业务权限、销售、采购、财务等)是否满足需求?
CS开发框架Toolbar与数据字典,业务单据的关系
手动和自动生成业务单据号码UpdateKeyMode详解(1)
使用触发器控制用户删除业务往来中使用的基础资料