本文介绍了在二次开发(二开)自定义动态表单时,如何控制单据头按钮的操作权限,即根据不同用户设定权限的方法。流程包括设置权限对象、业务对象功能授权和用户授权。通过查询权限对象和权限项表来配置权限,并演示了判断当前用户是否有特定操作权限的代码示例。最后,提到创建新业务对象时,需先创建并配置权限对象,并按步骤处理。
问题:二开自定义的动态表单,如何控制单据头的按钮操作权限,即:权限可以根据不同的用户来设定
一、权限设置及处理的大致流程:
1、设置权限对象,添加权限项(这里的权限项可以简单理解为表单上的各个按钮)
2、业务对象功能授权,根据角色配置相关业务对象的功能权限(有权、无权、禁止)
3、用户授权:用户+组织,绑定对应角色
二、这里以库存模块中"关账/反关账"功能来说明动态表单相关操作的权限控制
1、首先在BOS中打开"关账/反关账"表单,得到其绑定的权限对象为"期末处理"
2、管理员账号进入系统后台,找到权限对象"期末处理",查看其下绑定的相关权限项
3、根据1、2的设置,查询权限对象相关表
-- 权限对象表
select * from T_SEC_PERMISSIONOBJECT where FNUMBER = 'STK_Account'
-- 权限对象中权限项集合表(FPERMISSIONITEMID: 权限项内码、 FITEMID: 分录内码)
select * from T_SEC_PERMISSIONOBJECTENTRY where FITEMID = 'e0f06f8cdbd647be95ae98bc36b039db'
4、业务对象功能授权,根据角色配置相关业务对象的功能权限(有权、无权、禁止)
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的设置方法,进行处理。
参考:
以上分析及处理方案是一些个人的理解,如有不对之处,还请指正。