[8]深入浅出工作开源框架Camunda:用户查看任务权限控制

[8]深入浅出工作开源框架Camunda:用户查看任务权限控制,第1张

Camunda的WebApp中,其是通过管理员的认证授权来实现的。默认情况下,新建的用户是没有任何权限的。比如咱们创建一个用户user2

当用户user2登录后,其登录页面是一个空白的页面,如下图示意。

即使当前启动了一个流程,而且流程里面有一个任务就需要user2来处理,其登录进来后还是上面的页面。那在给User2授权之前,数据库里面发生了什么事情呢?我们可以看到数据库的ACT_RU_AUTHORIZATION表新增了一条数据。

select * from ACT_RU_AUTHORIZATION where USER_ID_ ='user2'


同时在认证授权界面,其也会多出一条记录。从上面来看,其Resource Type的值为7,那么不同的数值到底代表什么意思呢?
咱们可以找出Camunda的代码查看。“7”代表的是用户任务。

package org.camunda.bpm.engine.authorization;
import org.camunda.bpm.engine.EntityTypes;
/**
 * 

The set of built-in {@link Resource} names.

* * @author Daniel Meyer * */
public enum Resources implements Resource { APPLICATION(EntityTypes.APPLICATION, 0), USER(EntityTypes.USER, 1), GROUP(EntityTypes.GROUP, 2), GROUP_MEMBERSHIP(EntityTypes.GROUP_MEMBERSHIP, 3), AUTHORIZATION(EntityTypes.AUTHORIZATION, 4), FILTER(EntityTypes.FILTER, 5), PROCESS_DEFINITION(EntityTypes.PROCESS_DEFINITION, 6), TASK(EntityTypes.TASK, 7), PROCESS_INSTANCE(EntityTypes.PROCESS_INSTANCE, 8), DEPLOYMENT(EntityTypes.DEPLOYMENT, 9), DECISION_DEFINITION(EntityTypes.DECISION_DEFINITION, 10), TENANT(EntityTypes.TENANT, 11), TENANT_MEMBERSHIP(EntityTypes.TENANT_MEMBERSHIP, 12), BATCH(EntityTypes.BATCH, 13), DECISION_REQUIREMENTS_DEFINITION(EntityTypes.DECISION_REQUIREMENTS_DEFINITION, 14), REPORT(EntityTypes.REPORT, 15), DASHBOARD(EntityTypes.DASHBOARD, 16), OPERATION_LOG_CATEGORY(EntityTypes.OPERATION_LOG_CATEGORY, 17), @Deprecated OPTIMIZE(EntityTypes.OPTIMIZE, 18), HISTORIC_TASK(EntityTypes.HISTORIC_TASK, 19), HISTORIC_PROCESS_INSTANCE(EntityTypes.HISTORIC_PROCESS_INSTANCE, 20), SYSTEM(EntityTypes.SYSTEM, 21); String name; int id; Resources(String name, int id) { this.name = name; this.id = id; } public String resourceName() { return name; } public int resourceType() { return id; } }

其资源的实体类型的枚举如下:

package org.camunda.bpm.engine;
/**
 * @author Sebastian Menski
 */
public class EntityTypes {

  public static final String APPLICATION = "Application";
  public static final String ATTACHMENT = "Attachment";
  public static final String AUTHORIZATION = "Authorization";
  public static final String FILTER = "Filter";
  public static final String GROUP = "Group";
  public static final String GROUP_MEMBERSHIP = "Group membership";
  public static final String IDENTITY_LINK = "IdentityLink";
  public static final String TASK = "Task";
  public static final String HISTORIC_TASK = "HistoricTask";
  public static final String USER = "User";
  public static final String PROCESS_INSTANCE = "ProcessInstance";
  public static final String HISTORIC_PROCESS_INSTANCE = "HistoricProcessInstance";
  public static final String PROCESS_DEFINITION = "ProcessDefinition";
  public static final String JOB = "Job";
  public static final String JOB_DEFINITION = "JobDefinition";
  public static final String VARIABLE = "Variable";
  public static final String DEPLOYMENT = "Deployment";
  public static final String DECISION_DEFINITION = "DecisionDefinition";
  public static final String CASE_DEFINITION = "CaseDefinition";
  public static final String EXTERNAL_TASK = "ExternalTask";
  public static final String TENANT = "Tenant";
  public static final String TENANT_MEMBERSHIP = "TenantMembership";
  public static final String BATCH = "Batch";
  public static final String DECISION_REQUIREMENTS_DEFINITION = "DecisionRequirementsDefinition";
  public static final String DECISION_INSTANCE = "DecisionInstance";
  public static final String REPORT = "Report";
  public static final String DASHBOARD = "Dashboard";
  public static final String METRICS = "Metrics";
  public static final String TASK_METRICS = "TaskMetrics";
  public static final String CASE_INSTANCE = "CaseInstance";
  public static final String PROPERTY = "Property";
  public static final String OPERATION_LOG_CATEGORY = "OperationLogCatgeory";
  public static final String OPTIMIZE = "Optimize";
  public static final String OPERATION_LOG = "OperationLog";
  public static final String INCIDENT = "Incident";
  public static final String SYSTEM = "System";
}


那么如何才能让user2能够看到自己的任务呢?这个时候就需要借助于Camunda的权限管理。管理员登录权限控制系统,然后在权限控制里面添加用户user2可以查看任务。

但是即使赋予了user2查看任务的权限之后,即使当前有任务需要user2处理,其还是不能查询除任何的任务。

这个时候,还需要赋予给user2的任务查询权限。

这个时候user2就能查看到用户任务。

在回到数据库表来看user2的权限记录,总共有三条记录,其资源类型(resource_type)的值为0,5,7;

  APPLICATION(EntityTypes.APPLICATION, 0),
  FILTER(EntityTypes.FILTER, 5),
  TASK(EntityTypes.TASK, 7),

分别代表:

  • 应用权限
  • 任务过滤权限
  • 任务菜单权限


上面当有任务流转到用户的时候,如何进行权限设置,才能让user2看到其需要处理的任务并进行处理!但是由的时候,需要让user2能够看到虽然不是他自己审批的,但是他能看到所有的还未完成的流程的任务,或者指定的任务;这个时候应该如何做呢?
比如说,当前有一个任务是要由user1来处理,我们登录到user2的账户并来到task列表的页面。我们发现user2的里面没有任何的有关user1的任务。

这个时候,我给user2加一个查看所有任务的权限。


这个时候,我们在来刷新user2的用户任务列表,我们发现用户user2能看到所有的任务了!

上图可以知道,其实user2看到的是user1当前的任务~

当前,也可以在分配权限的时候,指定具体的任务ID,那么其就只能看到制定的任务。我们可以把这个功能用于任务的传阅:即当前用户只能查看,不能对当前的任务做任何改动 *** 作~

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/874812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存