【BOS基础系统_权限】对指定业务单据指定主管权限二开思路案例
需求:客户的职位汇报关系(T_ORG_PositionHierarchy)没有维护好,指定主管权限依赖职位汇报关系,客户想指定行政组织A下的主管用户X能看到 创建者是A组织下职位(这里我们默认需是主要职位)对应的职员对应的用户创建的付款单
背景:根据目前校验特殊数据权限-主管权限的当前框架限制,权限这边是需要返回一个sql条件即可,即业务单据创建者有哪些,例如:creator.id = '{当前登录用户userID}' or creator.id IN ( 可以看到的创建者用户id)
这里仅提供开发思路,需对应开发同事对以下验权代码有一定了解,自行评估。
主权权限验权代码各版本无较大差异,步骤如下:
1、主管权限的rule生成方法
com.kingdee.eas.base.permission.app.service.SpecialDataPermissionHandler.getDirectorRule(UserInfo, SpecialDataPermInfo)
在这里面我们要对付款单进行特殊处理,例如
String bizObjectType = specialDataPermInfo.getBizObjectType();
if("40284E81".equals(bizObjectType)){
//如果业务单据是付款单,做特殊处理 bostype = 40284E81
//后面的逻辑都在这里面写
}
2、当前登录用户如果有某单据的指定主管权限,查看他被指定主管的行政组织范围
com.kingdee.eas.base.permission.app.service.SpecialDataPermissionHandler.getUserPositionNumber(SpecialDataPermInfo, UserInfo, String)
其中对象 adminOrgList 就是该主管有权限的行政组织集合
3、我们需要返回最后的条件creator.id IN (...),有了上面的该主管的行政组织集合,则可以查出在这些行政组织下拥有主要职位的职员对应的用户
sql结构:
SELECT fid FROM T_pm_user where FPERSONID in (SELECT FID FROM T_bd_person where fid in (SELECT fpersonid FROM T_ORG_PositionMember where FISPRIMARY = 1 and FPOSITIONID in(
SELECT FID FROM t_org_position where FADMINORGUNITID in ({adminOrgList}中的行政组织id))))
则最终返回的条件可以是:
creator.id = '{当前登录用户userID}'
or
creator.id IN (
SELECT fid FROM T_pm_user where FPERSONID in (SELECT FID FROM T_bd_person where fid in (SELECT fpersonid FROM T_ORG_PositionMember where FISPRIMARY = 1 and FPOSITIONID in(
SELECT FID FROM t_org_position where FADMINORGUNITID in ({adminOrgList}中的行政组织id))))
)
【BOS基础系统_权限】对指定业务单据指定主管权限二开思路案例
本文2024-09-16 22:21:05发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-47580.html