自定义动态表单功能权限控制原创
金蝶云社区-邱育华
邱育华
3人赞赏了该文章 131次浏览 编辑于2021年11月26日 15:48:42

问题:二开自定义的动态表单,如何控制单据头的按钮操作权限,即:权限可以根据不同的用户来设定


一、权限设置及处理的大致流程:

1、设置权限对象,添加权限项(这里的权限项可以简单理解为表单上的各个按钮)

2、业务对象功能授权,根据角色配置相关业务对象的功能权限(有权、无权、禁止)

3、用户授权:用户+组织,绑定对应角色


二、这里以库存模块中"关账/反关账"功能来说明动态表单相关操作的权限控制

1、首先在BOS中打开"关账/反关账"表单,得到其绑定的权限对象为"期末处理"

image.png


2、管理员账号进入系统后台,找到权限对象"期末处理",查看其下绑定的相关权限项

image.png


3、根据1、2的设置,查询权限对象相关表

-- 权限对象表

select * from T_SEC_PERMISSIONOBJECT where FNUMBER = 'STK_Account'


-- 权限对象中权限项集合表(FPERMISSIONITEMID: 权限项内码、 FITEMID: 分录内码)

select * from T_SEC_PERMISSIONOBJECTENTRY where FITEMID = 'e0f06f8cdbd647be95ae98bc36b039db' 

image.png


4、业务对象功能授权,根据角色配置相关业务对象的功能权限(有权、无权、禁止)

image.png


5、判断当前登录用户是否有关账/反关账的权限,代码示例如下:

 //构造验权参数,以组织ID作为PKid来标记验权返回结果
List<BusinessObject> bizObjs = new List<BusinessObject>();
foreach (long orgId in selInvIdOrgs.Values.Distinct())
{
    BusinessObject bisObj = new BusinessObject(orgId);
    bisObj.Id = formID;
    bisObj.pkId = orgId.ToString();
    bizObjs.Add(bisObj);
}
//调用权限验证接口
List<PermissionAuthResult> authResults = PermissionServiceHelper.FuncPermissionAuth(this.View.Context,
    bizObjs, perItemId);
if (authResults == null || authResults.Count < 1)
{
    return false;
}


综合以上,在二开一个新的业务对象时,首先需要创建权限对象并配置权限项,如果是自定义的权限项,需要手动插入权限项表(T_SEC_PERMISSIONITEM、T_SEC_PERMISSIONITEM_L),再根据步骤二中1~5的设置方法,进行处理。




以上分析及处理方案是一些个人的理解,如有不对之处,还请指正。

3