1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.delta;
35
36 import info.magnolia.cms.security.Role;
37 import info.magnolia.cms.security.RoleManager;
38 import info.magnolia.cms.security.SecuritySupport;
39 import info.magnolia.module.InstallContext;
40
41
42
43
44
45
46 public class AddPermissionTask extends AbstractTask {
47
48 private String roleName;
49 private String workspaceName;
50 private String path;
51 private long permission;
52 private boolean includingSubNodes;
53
54 public AddPermissionTask(String taskName, String taskDescription, String roleName, String workspaceName, String path, long permission, boolean includingSubNodes) {
55 super(taskName, taskDescription);
56 this.roleName = roleName;
57 this.workspaceName = workspaceName;
58 this.path = path;
59 this.permission = permission;
60 this.includingSubNodes = includingSubNodes;
61 }
62
63 public void execute(InstallContext ctx) throws TaskExecutionException {
64 SecuritySupport securitySupport = SecuritySupport.Factory.getInstance();
65 RoleManager roleManager = securitySupport.getRoleManager();
66 Role role = roleManager.getRole(roleName);
67 if(role == null){
68 ctx.warn("Role \"" + roleName + "\" not found, can't add permissions to " + path + ".");
69 }
70 else{
71 try {
72 role.addPermission(workspaceName, path, permission);
73 if(includingSubNodes){
74 role.addPermission(workspaceName, path + "/*", permission);
75 }
76 }
77 catch (UnsupportedOperationException e) {
78 ctx.warn("Can't update role \"" + roleName + "\" due to an unsupported operation exception. This is most likely the case if the roles are managed externally.");
79 }
80 }
81 }
82 }