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

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

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

711a06b7652f5f52892b561f79a1edbd.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值