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.setup.for3_6_2;
35
36 import info.magnolia.cms.beans.config.ContentRepository;
37 import info.magnolia.cms.core.Content;
38 import info.magnolia.cms.core.ItemType;
39 import info.magnolia.cms.core.Path;
40 import info.magnolia.cms.security.Permission;
41 import info.magnolia.cms.util.NodeTypeFilter;
42 import info.magnolia.module.InstallContext;
43 import info.magnolia.module.delta.AllChildrenNodesOperation;
44 import info.magnolia.module.delta.TaskExecutionException;
45
46 import java.util.Iterator;
47
48 import javax.jcr.RepositoryException;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56
57
58
59
60 public class UpdateUsers extends AllChildrenNodesOperation {
61
62 private static Logger log = LoggerFactory.getLogger(UpdateUsers.class);
63
64 public UpdateUsers() {
65 super("User definition update", "Adds right to read their own node to all existing users.", ContentRepository.USERS, "/", new NodeTypeFilter(ItemType.FOLDER));
66 }
67
68 public void operateOnChildNode(Content node, InstallContext installContext)
69 throws RepositoryException, TaskExecutionException {
70 try {
71 Iterator iter = node.getChildren(ItemType.USER).iterator();
72 while (iter.hasNext()) {
73 Content user = (Content) iter.next();
74 String handle = user.getHandle();
75 boolean hasAccess = false;
76 Content acls = user.getChildByName("acl_users");
77 if (acls == null) {
78
79 installContext.warn("User " + user.getName() + " doesn't seem to be properly configured. Account path is " + handle + ".");
80 continue;
81 }
82 Iterator iter2 = acls.getChildren().iterator();
83 while (iter2.hasNext()) {
84 Content permission = (Content)iter2.next();
85 if (handle.equals(permission.getNodeData("path").getString()) && (permission.getNodeData("permissions").getLong() >= Permission.READ)) {
86 hasAccess = true;
87 break;
88 }
89 }
90 if (!hasAccess) {
91 Content acl = acls.createContent(Path.getUniqueLabel(installContext.getHierarchyManager(ContentRepository.USERS), acls.getHandle(), "0"), ItemType.CONTENTNODE);
92 acl.createNodeData("path", handle);
93 acl.createNodeData("permissions", new Long(Permission.READ));
94 acls.save();
95 }
96 }
97 } catch (RepositoryException e) {
98 log.error(e.getMessage(), e);
99 throw new TaskExecutionException("Failed to update user permissions. See log file for more details.");
100 }
101 }
102 }