KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > factories > PermissionFactory


1 package com.dotmarketing.factories;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collections JavaDoc;
5 import java.util.Comparator JavaDoc;
6 import java.util.HashSet JavaDoc;
7 import java.util.Iterator JavaDoc;
8 import java.util.List JavaDoc;
9 import java.util.Set JavaDoc;
10
11 import com.dotmarketing.beans.Identifier;
12 import com.dotmarketing.beans.Inode;
13 import com.dotmarketing.beans.Permission;
14 import com.dotmarketing.beans.WebAsset;
15 import com.dotmarketing.cache.IdentifierCache;
16 import com.dotmarketing.cache.PermissionCache;
17 import com.dotmarketing.cms.factories.PublicRoleFactory;
18 import com.dotmarketing.db.DotHibernate;
19 import com.dotmarketing.portlets.folders.model.Folder;
20 import com.dotmarketing.portlets.htmlpages.factories.HTMLPageFactory;
21 import com.dotmarketing.portlets.htmlpages.model.HTMLPage;
22 import com.dotmarketing.util.Config;
23 import com.dotmarketing.util.Logger;
24 import com.dotmarketing.util.UtilMethods;
25 import com.liferay.portal.NoSuchRoleException;
26 import com.liferay.portal.ejb.RoleLocalManagerUtil;
27 import com.liferay.portal.model.Role;
28 import com.liferay.portal.model.User;
29
30 /**
31  *
32  * @author maria & david (2005)
33  */

34 public class PermissionFactory {
35
36     public static Permission getPermission(String JavaDoc x) {
37         try {
38             return (Permission) new DotHibernate(Permission.class).load(Long.parseLong(x));
39         } catch (Exception JavaDoc e) {
40             return (Permission) new DotHibernate(Permission.class).load(x);
41         }
42     }
43
44     public static java.util.List JavaDoc<Permission> getPermissions(Inode o) {
45         try {
46             if (o.getInode() > 0) {
47                 Inode p = null;
48                 if (o instanceof WebAsset) {
49                     if (o.getInode() > 0) {
50                         p = new Identifier();
51                         if (o.getIdentifier() > 0) {
52                             p.setInode(o.getIdentifier());
53                         } else {
54                             p.setInode(IdentifierCache.getIdentifierByInodeFromCache((WebAsset) o).getInode());
55                         }
56
57                     }
58                 } else {
59                     p = o;
60                 }
61
62                 List JavaDoc<Permission> l = null;
63                 if (p.getInode() > 0) {
64                     DotHibernate dh = new DotHibernate(Permission.class);
65                     dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ?");
66                     dh.setParam(p.getInode());
67
68                     l = (List JavaDoc<Permission>) dh.list();
69                 } else {
70                     l = new ArrayList JavaDoc<Permission>();
71                 }
72
73                 /*
74                  * Make sure we have CMS_ADMIN permissions dammit
75                  */

76
77                 Permission perm = new Permission();
78                 perm.setInode(p.getInode());
79                 perm.setPermission(Config.getIntProperty("PERMISSION_PUBLISH"));
80                 perm.setRoleId(Long.parseLong(PublicRoleFactory.getCMSAdminRole().getRoleId()));
81                 l.add(perm);
82                 perm = new Permission();
83                 perm.setInode(p.getInode());
84                 perm.setPermission(Config.getIntProperty("PERMISSION_PUBLISH"));
85                 perm.setRoleId(Long.parseLong(PublicRoleFactory.getCMSAdminRole().getRoleId()));
86                 l.add(perm);
87                 perm = new Permission();
88                 perm.setInode(p.getInode());
89                 perm.setPermission(Config.getIntProperty("PERMISSION_PUBLISH"));
90                 perm.setRoleId(Long.parseLong(PublicRoleFactory.getCMSAdminRole().getRoleId()));
91                 l.add(perm);
92
93                 return new ArrayList JavaDoc<Permission>(new HashSet JavaDoc<Permission>(l));
94
95             }
96         } catch (Exception JavaDoc e) {
97             Logger.warn(PermissionFactory.class, "getPermissions failed:" + e, e);
98         }
99
100         return new java.util.ArrayList JavaDoc();
101     }
102
103     @SuppressWarnings JavaDoc("unchecked")
104     public static java.util.List JavaDoc getPermissionIdsByRoles(Inode o, Role[] roles) {
105
106         java.util.List JavaDoc permissions = new java.util.ArrayList JavaDoc();
107
108         Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
109
110         int x = 0;
111
112         if (o instanceof WebAsset) {
113             if (o.getInode() > 0) {
114                 o = IdentifierFactory.getIdentifierByInode(o);
115             }
116         }
117
118         for (int i = 0; i < roles.length; i++) {
119             Role role = (Role) roles[i];
120
121             // if the user is a CMS admin, give them full permissions
122
if (cmsAdminRole != null && cmsAdminRole.getRoleId().equals(role.getRoleId())) {
123                 if (!permissions.contains(Config.getStringProperty("PERMISSION_READ"))) {
124                     permissions.add(x++, Config.getStringProperty("PERMISSION_READ"));
125                 }
126                 if (!permissions.contains(Config.getStringProperty("PERMISSION_WRITE"))) {
127                     permissions.add(x++, Config.getStringProperty("PERMISSION_WRITE"));
128                 }
129                 if (!permissions.contains(Config.getStringProperty("PERMISSION_PUBLISH"))) {
130                     permissions.add(x++, Config.getStringProperty("PERMISSION_PUBLISH"));
131                 }
132                 return permissions;
133             }
134             java.util.List JavaDoc rolePermissions = getPermissionsByRole(o, role);
135             java.util.Iterator JavaDoc iterRolePerms = rolePermissions.iterator();
136
137             while (iterRolePerms.hasNext()) {
138                 String JavaDoc permStr = String.valueOf(((Permission) iterRolePerms.next()).getPermission());
139
140                 if (!permissions.contains(permStr)) {
141                     permissions.add(x++, permStr);
142                 }
143             }
144         }
145
146         return permissions;
147     }
148
149     @SuppressWarnings JavaDoc("unchecked")
150     public static String JavaDoc getMaxPermissionIdForUserOnFolder(Inode inode, String JavaDoc userId) {
151
152         String JavaDoc maxPermission = "0";
153         Role[] myRoleArray = (Role[]) RoleFactory.getAllRolesForUser(userId).toArray(new Role[0]);
154
155         try {
156
157             Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
158             for (int i = 0; i < myRoleArray.length; i++) {
159                 Role role = (Role) myRoleArray[i];
160                 if (cmsAdminRole != null && cmsAdminRole.getRoleId().equals(role.getRoleId())) {
161                     return Config.getStringProperty("PERMISSION_PUBLISH");
162                 }
163             }
164         } catch (Exception JavaDoc e) {
165         }
166
167         java.util.List JavaDoc permissions = PermissionCache.getPermissionIdsByRolesFromCache(inode, myRoleArray);
168
169         if ((permissions != null) && (permissions.size() > 0)) {
170             Collections.sort(permissions);
171             maxPermission = (String JavaDoc) permissions.get(permissions.size() - 1);
172         }
173
174         return maxPermission;
175     }
176
177     public static String JavaDoc getMaxPermissionIdForUserOnWebasset(Inode inode, String JavaDoc userId) {
178         Folder parentFolder = (Folder) InodeFactory.getParentOfClass(inode, Folder.class);
179
180         return getMaxPermissionIdForUserOnFolder(parentFolder, userId);
181     }
182
183     @SuppressWarnings JavaDoc("unchecked")
184     public static java.util.List JavaDoc getPermissionByRoles(Inode o, Role[] roles) {
185         java.util.List JavaDoc permissions = new java.util.ArrayList JavaDoc();
186
187         for (int i = 0; i < roles.length; i++) {
188             Role role = (Role) roles[i];
189             java.util.List JavaDoc rolePermissions = getPermissionsByRole(o, role);
190             java.util.Iterator JavaDoc iterRolePerms = rolePermissions.iterator();
191
192             while (iterRolePerms.hasNext()) {
193                 permissions.add((Permission) iterRolePerms.next());
194             }
195         }
196
197         return permissions;
198     }
199
200     public static java.util.List JavaDoc getPermissionsByRole(Inode o, Role role) {
201         try {
202             Inode p = (Inode) o;
203
204             if (p.getInode() > 0) {
205                 DotHibernate dh = new DotHibernate(Permission.class);
206                 dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ? and roleid = ?");
207                 dh.setParam(p.getInode());
208                 dh.setParam(role.getRoleId());
209
210                 return dh.list();
211             }
212         } catch (Exception JavaDoc e) {
213             Logger.warn(PermissionFactory.class, "getPermissionsByRole failed:" + e, e);
214         }
215
216         return new java.util.ArrayList JavaDoc();
217     }
218
219     @SuppressWarnings JavaDoc("unchecked")
220     public static java.util.Set JavaDoc getReadRolesForAsset(Inode o) {
221         Set JavaDoc readPermissions = new HashSet JavaDoc();
222
223         try {
224             // automatically add CMS admin
225
Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
226             readPermissions.add(cmsAdminRole);
227             if (o instanceof WebAsset) {
228                 if (o.getInode() > 0)
229                     o = IdentifierFactory.getIdentifierByInode(o);
230             }
231
232             if (o.getInode() > 0) {
233                 DotHibernate dh = new DotHibernate(Permission.class);
234                 dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ? and permission = "
235                         + Config.getIntProperty("PERMISSION_READ"));
236                 dh.setParam(o.getInode());
237
238                 Iterator JavaDoc iter = dh.list().iterator();
239
240                 while (iter.hasNext()) {
241                     Permission permission = (Permission) iter.next();
242                     try {
243                         Role role = RoleLocalManagerUtil.getRoleById(permission.getRoleId() + "");
244                         readPermissions.add(role.getName());
245                     } catch (NoSuchRoleException nsrl) {
246                         Logger.error(PermissionFactory.class, "The roleId " + permission.getRoleId() + " do not exists in the DB");
247                     }
248                 }
249             }
250         } catch (Exception JavaDoc e) {
251             Logger.warn(PermissionFactory.class, "getReadRolesForAsset failed:" + e, e);
252         }
253
254         return readPermissions;
255     }
256
257     @SuppressWarnings JavaDoc("unchecked")
258     public static java.util.Set JavaDoc getWriteRolesForAsset(Inode o) {
259         Set JavaDoc writePermissions = new HashSet JavaDoc();
260
261         try {
262             // automatically add CMS admin
263
Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
264             writePermissions.add(cmsAdminRole);
265             if (o instanceof WebAsset) {
266                 if (o.getInode() > 0)
267                     o = IdentifierFactory.getIdentifierByInode(o);
268             }
269
270             if (o.getInode() > 0) {
271                 DotHibernate dh = new DotHibernate(Permission.class);
272                 dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ? and permission = "
273                         + Config.getIntProperty("PERMISSION_WRITE"));
274                 dh.setParam(o.getInode());
275
276                 Iterator JavaDoc iter = dh.list().iterator();
277
278                 while (iter.hasNext()) {
279                     Permission permission = (Permission) iter.next();
280                     try {
281
282                         Role role = RoleLocalManagerUtil.getRoleById(permission.getRoleId() + "");
283                         writePermissions.add(role.getName());
284                     } catch (NoSuchRoleException nsrl) {
285                         Logger.error(PermissionFactory.class, "The roleId " + permission.getRoleId() + " do not exists in the DB");
286                     }
287                 }
288             }
289         } catch (Exception JavaDoc e) {
290             Logger.warn(PermissionFactory.class, "getWriteRolesForAsset failed:" + e, e);
291         }
292
293         return writePermissions;
294     }
295
296     @SuppressWarnings JavaDoc("unchecked")
297     public static java.util.Set JavaDoc getPublishRolesForAsset(Inode o) {
298         Set JavaDoc publishPermissions = new HashSet JavaDoc();
299
300         try {
301             // automatically add CMS admin
302
Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
303             publishPermissions.add(cmsAdminRole);
304             if (o instanceof WebAsset) {
305                 if (o.getInode() > 0)
306                     o = IdentifierFactory.getIdentifierByInode(o);
307             }
308
309             if (o.getInode() > 0) {
310                 DotHibernate dh = new DotHibernate(Permission.class);
311                 dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ? and permission = "
312                         + Config.getIntProperty("PERMISSION_PUBLISH"));
313                 dh.setParam(o.getInode());
314
315                 Iterator JavaDoc iter = dh.list().iterator();
316
317                 while (iter.hasNext()) {
318                     Permission permission = (Permission) iter.next();
319                     try {
320                         Role role = RoleLocalManagerUtil.getRoleById(permission.getRoleId() + "");
321                         publishPermissions.add(role.getName());
322                     } catch (NoSuchRoleException nsrl) {
323                         Logger.error(PermissionFactory.class, "The roleId " + permission.getRoleId() + " do not exists in the DB");
324                     }
325                 }
326             }
327         } catch (Exception JavaDoc e) {
328             Logger.warn(PermissionFactory.class, "getPublishRolesForAsset failed:" + e, e);
329         }
330
331         return publishPermissions;
332     }
333
334     public static java.util.List JavaDoc getPermissions(Inode o, String JavaDoc orderBy) {
335         try {
336             Inode p = (Inode) o;
337             if (p.getInode() > 0) {
338                 DotHibernate dh = new DotHibernate(Permission.class);
339                 dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ? order by " + orderBy);
340                 dh.setParam(p.getInode());
341
342                 return dh.list();
343             }
344         } catch (Exception JavaDoc e) {
345             Logger.warn(PermissionFactory.class, "getPermissions failed:" + e, e);
346         }
347
348         return new java.util.ArrayList JavaDoc();
349     }
350
351     public static Object JavaDoc getParentOfPermission(Permission p) {
352         DotHibernate dh = new DotHibernate(Inode.class);
353         dh.setQuery("from inode in class com.dotmarketing.beans.Inode where inode = ?");
354         dh.setParam(p.getInode());
355
356         try {
357             return dh.list().get(0);
358         } catch (Exception JavaDoc e) {
359             try {
360                 return Inode.class.newInstance();
361             } catch (Exception JavaDoc ex) {
362                 return null;
363             }
364         }
365     }
366
367     public static boolean userHasReadPermission(com.liferay.portal.model.User user, List JavaDoc permissions) {
368
369         try {
370             // automatically add CMS admin
371
Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
372             // need to get all user roles and make sure it has read permissions.
373
Role[] roles = (Role[]) RoleFactory.getAllRolesForUser(user.getUserId()).toArray(new Role[0]);
374             for (int i = 0; i < roles.length; i++) {
375                 Role role = roles[i];
376                 if (cmsAdminRole.getRoleId() == role.getRoleId()) {
377                     return true;
378                 }
379
380                 Iterator JavaDoc it = permissions.iterator();
381                 while (it.hasNext()) {
382                     // Permission perm = (Permission) it.next();
383
String JavaDoc perm = (String JavaDoc) it.next();
384                     // if
385
// (String.valueOf(perm.getRoleId()).equals(role.getRoleId()))
386
if (String.valueOf(perm).equals(role.getName()))
387                         return true;
388                 }
389             }
390         } catch (Exception JavaDoc e) {
391             e.printStackTrace();
392         }
393         return false;
394     }
395
396     public static void deletePermission(Permission p) {
397         if (permissionExists(p)) {
398             DotHibernate.delete(p);
399         }
400
401     }
402
403     public static boolean permissionExists(Permission p) {
404         String JavaDoc condition = "roleid =" + p.getRoleId() + " and permission=" + p.getPermission() + " and inode_id=" + p.getInode();
405         DotHibernate dh = new DotHibernate(Permission.class);
406         dh.setQuery("from inode in class com.dotmarketing.beans.Permission where " + condition);
407         Permission permission = (Permission) dh.load();
408         if (permission.getId() > 0) {
409             return true;
410         }
411         return false;
412     }
413
414     public static void savePermission(Permission p) {
415         if (!permissionExists(p)) {
416             DotHibernate.saveOrUpdate(p);
417         }
418     }
419
420     public static void addPermissionByRoleName(com.liferay.portal.model.Company company, Inode inode, String JavaDoc roleName) {
421         try {
422             // gets role based on role name and company id
423
Role adminRole = RoleLocalManagerUtil.getRoleByName(company.getCompanyId(), roleName);
424
425             // creates new permission to read
426
Permission p = new Permission();
427             p.setInode(inode.getInode());
428             p.setRoleId(Long.parseLong(adminRole.getRoleId()));
429             p.setPermission(Config.getIntProperty("PERMISSION_READ"));
430             savePermission(p);
431
432             // creates new permission to write
433
p = new Permission();
434             p.setInode(inode.getInode());
435             p.setRoleId(Long.parseLong(adminRole.getRoleId()));
436             p.setPermission(Config.getIntProperty("PERMISSION_WRITE"));
437             savePermission(p);
438
439             // creates new permission to publish
440
p = new Permission();
441             p.setInode(inode.getInode());
442             p.setRoleId(Long.parseLong(adminRole.getRoleId()));
443             p.setPermission(Config.getIntProperty("PERMISSION_PUBLISH"));
444             savePermission(p);
445
446             if (inode instanceof Folder) {
447                 PermissionCache.addToPermissionCache((Folder) inode);
448             }
449         } catch (Exception JavaDoc e) {
450         }
451     }
452
453     public static void addPermissionByRoleName(Inode inode, String JavaDoc roleName) {
454         try {
455             // gets role based on role name and company id
456
Role adminRole = RoleLocalManagerUtil.getRoleByName(com.dotmarketing.cms.factories.PublicCompanyFactory.getDefaultCompany()
457                     .getCompanyId(), roleName);
458
459             // creates new permission to read
460
Permission p = new Permission();
461             p.setInode(inode.getInode());
462             p.setRoleId(Long.parseLong(adminRole.getRoleId()));
463
464             Logger.debug(PermissionFactory.class, "Long.parseLong(adminRole.getRoleId()) ***************=" + Long.parseLong(adminRole.getRoleId()));
465
466             p.setPermission(Config.getIntProperty("PERMISSION_READ"));
467             savePermission(p);
468
469             // creates new permission to write
470
p = new Permission();
471             p.setInode(inode.getInode());
472             p.setRoleId(Long.parseLong(adminRole.getRoleId()));
473             p.setPermission(Config.getIntProperty("PERMISSION_WRITE"));
474             savePermission(p);
475
476             // creates new permission to publish
477
p = new Permission();
478             p.setInode(inode.getInode());
479             p.setRoleId(Long.parseLong(adminRole.getRoleId()));
480             p.setPermission(Config.getIntProperty("PERMISSION_PUBLISH"));
481             savePermission(p);
482
483             if (inode instanceof Folder) {
484                 PermissionCache.addToPermissionCache((Folder) inode);
485             }
486         } catch (Exception JavaDoc e) {
487
488         }
489     }
490
491     public static Set JavaDoc<String JavaDoc> getEmailsWithPermissionOnInode(Inode f, int permissionId) {
492         java.util.List JavaDoc permissions = getPermissionOnInodeOfPermissionType(f, permissionId);
493         Iterator JavaDoc permIterator = permissions.iterator();
494         Set JavaDoc<String JavaDoc> myEmailList = new HashSet JavaDoc<String JavaDoc>();
495
496         while (permIterator.hasNext()) {
497             Permission perm = (Permission) permIterator.next();
498
499             try {
500                 Set JavaDoc<User> users = RoleFactory.getUsers(String.valueOf(perm.getRoleId()));
501                 Iterator JavaDoc userIterator = users.iterator();
502
503                 while (userIterator.hasNext()) {
504                     String JavaDoc myEmail = ((User) userIterator.next()).getEmailAddress();
505
506                     Logger.debug(PermissionFactory.class, "myEmail" + myEmail);
507
508                     myEmailList.add(myEmail);
509                 }
510             } catch (Exception JavaDoc e) {
511                 Logger.warn(PermissionFactory.class, "getUsers from role id failed.", e);
512             }
513         }
514
515         return myEmailList;
516     }
517
518     public static java.util.Set JavaDoc getEmailsWithRole(String JavaDoc roleId) {
519         Set JavaDoc<String JavaDoc> myEmailList = new HashSet JavaDoc<String JavaDoc>();
520
521         try {
522             Set JavaDoc<User> users = RoleFactory.getUsers(String.valueOf(roleId));
523             Iterator JavaDoc userIterator = users.iterator();
524
525             while (userIterator.hasNext()) {
526                 String JavaDoc myEmail = ((User) userIterator.next()).getEmailAddress();
527
528                 Logger.debug(PermissionFactory.class, "myEmail" + myEmail);
529
530                 myEmailList.add(myEmail);
531             }
532         } catch (Exception JavaDoc e) {
533             Logger.warn(PermissionFactory.class, "getEmailsWithRole failed.", e);
534         }
535
536         return myEmailList;
537     }
538
539     public static java.util.Set JavaDoc[] getRolesAndUsersWithPermissionOnInode(Inode f, int permissionType) {
540         java.util.List JavaDoc permissions = getPermissionOnInodeOfPermissionType(f, permissionType);
541         Iterator JavaDoc permIterator = permissions.iterator();
542         java.util.Set JavaDoc[] rolesAndUsers = new java.util.Set JavaDoc[2];
543         java.util.SortedSet JavaDoc<User> myUserSet = new java.util.TreeSet JavaDoc<User>();
544         java.util.SortedSet JavaDoc<Role> myRoleSet = new java.util.TreeSet JavaDoc<Role>();
545
546         while (permIterator.hasNext()) {
547             Permission perm = (Permission) permIterator.next();
548
549             try {
550                 Role role = RoleLocalManagerUtil.getRoleById(String.valueOf(perm.getRoleId()));
551
552                 Logger.debug(PermissionFactory.class, "RoleName" + role.getName());
553                 Logger.debug(PermissionFactory.class, "RoleId" + role.getRoleId());
554
555                 myRoleSet.add(role);
556
557                 Set JavaDoc<User> users = RoleFactory.getUsers(String.valueOf(perm.getRoleId()));
558                 Iterator JavaDoc userIterator = users.iterator();
559
560                 while (userIterator.hasNext()) {
561                     User myUser = (User) userIterator.next();
562                     String JavaDoc myUserFullName = myUser.getFullName();
563                     String JavaDoc myUserId = myUser.getUserId();
564
565                     Logger.debug(PermissionFactory.class, "myUserFullName" + myUserFullName);
566                     Logger.debug(PermissionFactory.class, "myUserId" + myUserId);
567
568                     myUserSet.add(myUser);
569                 }
570             } catch (Exception JavaDoc e) {
571                 Logger.warn(PermissionFactory.class, "getUsers from role id failed.", e);
572             }
573         }
574
575         rolesAndUsers[0] = myRoleSet;
576         rolesAndUsers[1] = myUserSet;
577
578         return rolesAndUsers;
579     }
580
581     @SuppressWarnings JavaDoc("unchecked")
582     public static java.util.List JavaDoc getPermissionOnInodeOfPermissionType(Inode o, int permissionId) {
583         java.util.ArrayList JavaDoc<Permission> perms = new java.util.ArrayList JavaDoc<Permission>();
584
585         try {
586             if (o instanceof WebAsset)
587                 if (o.getInode() > 0)
588                     o = IdentifierFactory.getIdentifierByInode(o);
589
590             if (o instanceof Identifier) {
591                 List JavaDoc permissions = PermissionCache.getPermissionsFromCache((Identifier) o);
592                 Iterator JavaDoc it = permissions.iterator();
593                 while (it.hasNext()) {
594                     Permission perm = (Permission) it.next();
595                     if (perm.getPermission() >= permissionId)
596                         perms.add(perm);
597                 }
598             } else {
599                 Inode f = (Inode) o;
600                 if (f.getInode() > 0) {
601                     DotHibernate dh = new DotHibernate(Permission.class);
602                     dh.setQuery("from inode in class com.dotmarketing.beans.Permission where inode_id = ? and permission >= ?");
603                     dh.setParam(f.getInode());
604                     dh.setParam(permissionId);
605                     perms.addAll(dh.list());
606                 }
607             }
608         } catch (Exception JavaDoc e) {
609             Logger.warn(PermissionFactory.class, "getPermissionOnInode with permission failed:" + e, e);
610         }
611
612         return perms;
613     }
614
615     public static boolean doesUserHavePermission(Inode o, int permissionId, User user) {
616         boolean hasPermission = false;
617
618         if ((o == null) || (user == null)) {
619             return hasPermission;
620         }
621
622         if (o instanceof WebAsset) {
623             if (o.getInode() > 0)
624                 o = IdentifierFactory.getIdentifierByInode(o);
625         }
626
627         if (o.getInode() == 0) {
628             return hasPermission;
629         }
630
631         List JavaDoc userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
632
633         // If the user is a CMS Admin, they have permission
634
try {
635             Role cmsAdminRole = RoleFactory.getCMSAdministratorRole();
636             Iterator JavaDoc it = userRoles.iterator();
637             while (it.hasNext()) {
638                 Role r = (Role) it.next();
639                 if (r.getRoleId().equals(cmsAdminRole.getRoleId())) {
640                     return true;
641                 }
642             }
643         } catch (Exception JavaDoc e) {
644             e.printStackTrace();
645         }
646
647         java.util.List JavaDoc permissions = getPermissionOnInodeOfPermissionType(o, permissionId);
648         Iterator JavaDoc permIterator = permissions.iterator();
649
650         while (permIterator.hasNext()) {
651             Permission perm = (Permission) permIterator.next();
652             try {
653                 Role role = RoleLocalManagerUtil.getRoleById(String.valueOf(perm.getRoleId()));
654                 if (userRoles.contains(role))
655                     return true;
656             } catch (Exception JavaDoc e) {
657                 Logger.debug(PermissionFactory.class, "doesUserHavePermission failed to find role: " + perm.getRoleId(), e);
658             }
659         }
660
661         return hasPermission;
662     }
663
664     // PERMISSION MAP METHODS!!!
665
public static void mapAllPermissions() {
666
667         Logger.debug(PermissionFactory.class, "\n\nGoing to map all Permissions!!!!");
668
669         if (Config.CONTEXT == null) {
670             return;
671         }
672
673         java.util.List JavaDoc list = HTMLPageFactory.getLiveHTMLPages();
674
675         Iterator JavaDoc i = list.iterator();
676
677         while (i.hasNext()) {
678             HTMLPage htmlPage = (HTMLPage) i.next();
679             PermissionCache.addToPermissionCache(htmlPage);
680         }
681
682         Logger.debug(PermissionFactory.class, "\n\nFinished mapping all Permissions!!!!");
683     }
684
685     public static List JavaDoc getPermissionsFromFolder(Folder folder) {
686         return getPermissions(folder);
687     }
688
689     public static List JavaDoc getPermissionsFromWebAsset(WebAsset webAsset) {
690         return getPermissions(webAsset);
691     }
692
693     public static List JavaDoc getPermissionsFromIdentifier(Identifier id) {
694         return getPermissions(id);
695     }
696
697     public static void copyPermissions(Inode from, Inode to) {
698         if (from instanceof WebAsset)
699             if (from.getInode() > 0)
700                 from = IdentifierFactory.getIdentifierByInode(from);
701
702         if (to instanceof WebAsset)
703             if (to.getInode() > 0)
704                 to = IdentifierFactory.getIdentifierByInode(to);
705
706         java.util.List JavaDoc toPerms = PermissionFactory.getPermissions(to);
707         java.util.Iterator JavaDoc iterPerms = toPerms.iterator();
708         while (iterPerms.hasNext()) {
709             PermissionFactory.deletePermission((Permission) iterPerms.next());
710         }
711
712         java.util.List JavaDoc fromPerms = PermissionFactory.getPermissions(from);
713         iterPerms = fromPerms.iterator();
714         while (iterPerms.hasNext()) {
715             Permission currPerm = (Permission) iterPerms.next();
716             Permission newPerm = new Permission(to.getInode(), currPerm.getRoleId(), currPerm.getPermission());
717             PermissionFactory.savePermission(newPerm);
718         }
719
720     }
721
722     public static String JavaDoc permissionsToString(List JavaDoc<Permission> permissions) {
723         StringBuffer JavaDoc permissionsSt = new StringBuffer JavaDoc();
724         for (Permission perm : permissions) {
725             int permission = perm.getPermission();
726             long roleId = perm.getRoleId();
727             String JavaDoc st = "P" + roleId + "." + permission + "P ";
728             permissionsSt.append(st);
729         }
730         return permissionsSt.toString();
731     }
732
733     public static boolean userHasPermission(String JavaDoc permissionsString, int permission, User user) {
734         List JavaDoc<Role> roles = RoleFactory.getAllRolesForUser(user.getUserId());
735         for (Role role : roles) {
736             String JavaDoc permissionSt = "P" + role.getRoleId() + "." + permission + "P";
737             if (permissionsString.indexOf(permissionSt) > -1)
738                 return true;
739         }
740         return false;
741     }
742
743     public static List JavaDoc<Permission> getPermissionsNoLock(Inode inode) {
744         try {
745             if (inode.getInode() > 0) {
746                 Identifier id = IdentifierFactory.getIdentifierByInodeNoLock(inode);
747
748                 // Return of no Permissions
749
if (id.getInode() == 0) {
750                     return new ArrayList JavaDoc<Permission>();
751                 }
752
753                 DotHibernate dh = new DotHibernate(Permission.class);
754                 StringBuffer JavaDoc querie = new StringBuffer JavaDoc();
755                 querie.append("select {permission.*} from permission with(nolock) where inode_id = " + id.getInode());
756                 dh.setSQLQuery(querie.toString());
757
758                 List JavaDoc<Permission> permissions = (List JavaDoc<Permission>) dh.list();
759
760                 return permissions;
761             }
762         } catch (Exception JavaDoc e) {
763             Logger.warn(PermissionFactory.class, "getPermissions failed:" + e, e);
764         }
765         return new ArrayList JavaDoc<Permission>();
766     }
767
768     public static List JavaDoc<Role> getAllRolesWithPermissionOver(Inode asset_inode, int permission) {
769         List JavaDoc<Role> rolesList = new ArrayList JavaDoc();
770         java.util.List JavaDoc<com.dotmarketing.beans.Permission> asset_permissions = com.dotmarketing.factories.PermissionFactory
771                 .getPermissions(asset_inode);
772         for (Permission p : asset_permissions) {
773             if (p.getPermission() == permission) {
774                 try {
775                     Role role = RoleFactory.getRoleById(String.valueOf(p.getRoleId()));
776                     if (UtilMethods.isSet(role.getRoleId()))
777                         rolesList.add(role);
778                 } catch (NoSuchRoleException e) {
779                     Logger.warn(PermissionFactory.class, "Invalid role found in permission: " + p.toString() + ", the permission will be removed.");
780                     deletePermission(p);
781                 }
782             }
783         }
784         Collections.sort(rolesList, new Comparator JavaDoc() {
785             public int compare(Object JavaDoc arg0, Object JavaDoc arg1) {
786                 if (arg0 instanceof Role && arg1 instanceof Role) {
787                     return ((Role) arg0).getName().compareTo(((Role) arg1).getName());
788                 }
789                 return 0;
790             }
791         });
792         return rolesList;
793     }
794 }
795
Popular Tags