【BOS基础系统_权限】对指定业务单据指定主管权限二开思路案例

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

【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

         //后面的逻辑都在这里面写

 

        }

image.webp



2、当前登录用户如果有某单据的指定主管权限,查看他被指定主管的行政组织范围

com.kingdee.eas.base.permission.app.service.SpecialDataPermissionHandler.getUserPositionNumber(SpecialDataPermInfo, UserInfo, String)

其中对象 adminOrgList 就是该主管有权限的行政组织集合

image.webp


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基础系统_权限】对指定业务单据指定主管权限二开思路案例

需求:客户的职位汇报关系(T_ORG_PositionHierarchy)没有维护好,指定主管权限依赖职位汇报关系,客户想指定行政组织A下的主管用户X能看到...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息