001
014
015 package com.liferay.portal.workflow.permission;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.kernel.workflow.WorkflowException;
020 import com.liferay.portal.kernel.workflow.WorkflowInstance;
021 import com.liferay.portal.kernel.workflow.WorkflowInstanceManagerUtil;
022 import com.liferay.portal.kernel.workflow.WorkflowTaskManagerUtil;
023 import com.liferay.portal.kernel.workflow.permission.WorkflowPermission;
024 import com.liferay.portal.model.WorkflowInstanceLink;
025 import com.liferay.portal.security.permission.ActionKeys;
026 import com.liferay.portal.security.permission.PermissionChecker;
027 import com.liferay.portal.service.WorkflowDefinitionLinkLocalServiceUtil;
028 import com.liferay.portal.service.WorkflowInstanceLinkLocalServiceUtil;
029
030
033 public class WorkflowPermissionImpl implements WorkflowPermission {
034
035 public Boolean hasPermission(
036 PermissionChecker permissionChecker, long groupId, String className,
037 long classPK, String actionId) {
038
039 try {
040 return doHasPermission(
041 permissionChecker, groupId, className, classPK, actionId);
042 }
043 catch (Exception e) {
044 _log.error(e, e);
045 }
046
047 return null;
048 }
049
050 protected Boolean doHasPermission(
051 PermissionChecker permissionChecker, long groupId, String className,
052 long classPK, String actionId)
053 throws Exception {
054
055 long companyId = permissionChecker.getCompanyId();
056
057 if (permissionChecker.isCompanyAdmin() ||
058 permissionChecker.isCommunityAdmin(groupId)) {
059
060 return Boolean.TRUE;
061 }
062
063 if (!WorkflowDefinitionLinkLocalServiceUtil.hasWorkflowDefinitionLink(
064 companyId, groupId, className)) {
065
066 return null;
067 }
068
069 if (WorkflowInstanceLinkLocalServiceUtil.hasWorkflowInstanceLink(
070 companyId, groupId, className, classPK)) {
071
072 WorkflowInstanceLink workflowInstanceLink =
073 WorkflowInstanceLinkLocalServiceUtil.getWorkflowInstanceLink(
074 companyId, groupId, className, classPK);
075
076 WorkflowInstance workflowInstance =
077 WorkflowInstanceManagerUtil.getWorkflowInstance(
078 companyId, workflowInstanceLink.getWorkflowInstanceId());
079
080 if (workflowInstance.isComplete()) {
081 return null;
082 }
083
084 boolean hasPermission = isWorkflowTaskAssignedToUser(
085 permissionChecker, workflowInstance);
086
087 if (!hasPermission && actionId.equals(ActionKeys.VIEW)) {
088 return null;
089 }
090 else {
091 return hasPermission;
092 }
093 }
094
095 return null;
096 }
097
098 protected boolean isWorkflowTaskAssignedToUser(
099 PermissionChecker permissionChecker,
100 WorkflowInstance workflowInstance)
101 throws WorkflowException {
102
103 int count =
104 WorkflowTaskManagerUtil.getWorkflowTaskCountByWorkflowInstance(
105 permissionChecker.getCompanyId(), permissionChecker.getUserId(),
106 workflowInstance.getWorkflowInstanceId(), Boolean.FALSE);
107
108 if (count > 0) {
109 return true;
110 }
111 else {
112 return false;
113 }
114 }
115
116 private static Log _log = LogFactoryUtil.getLog(
117 WorkflowPermissionImpl.class);
118
119 }