1 package com.dotmarketing.factories; 2 3 import java.util.ArrayList ; 4 import java.util.Collections ; 5 import java.util.Comparator ; 6 import java.util.HashSet ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 import java.util.Set ; 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 34 public class PermissionFactory { 35 36 public static Permission getPermission(String x) { 37 try { 38 return (Permission) new DotHibernate(Permission.class).load(Long.parseLong(x)); 39 } catch (Exception e) { 40 return (Permission) new DotHibernate(Permission.class).load(x); 41 } 42 } 43 44 public static java.util.List <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 <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 <Permission>) dh.list(); 69 } else { 70 l = new ArrayList <Permission>(); 71 } 72 73 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 <Permission>(new HashSet <Permission>(l)); 94 95 } 96 } catch (Exception e) { 97 Logger.warn(PermissionFactory.class, "getPermissions failed:" + e, e); 98 } 99 100 return new java.util.ArrayList (); 101 } 102 103 @SuppressWarnings ("unchecked") 104 public static java.util.List getPermissionIdsByRoles(Inode o, Role[] roles) { 105 106 java.util.List permissions = new java.util.ArrayList (); 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 (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 rolePermissions = getPermissionsByRole(o, role); 135 java.util.Iterator iterRolePerms = rolePermissions.iterator(); 136 137 while (iterRolePerms.hasNext()) { 138 String 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 ("unchecked") 150 public static String getMaxPermissionIdForUserOnFolder(Inode inode, String userId) { 151 152 String 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 e) { 165 } 166 167 java.util.List permissions = PermissionCache.getPermissionIdsByRolesFromCache(inode, myRoleArray); 168 169 if ((permissions != null) && (permissions.size() > 0)) { 170 Collections.sort(permissions); 171 maxPermission = (String ) permissions.get(permissions.size() - 1); 172 } 173 174 return maxPermission; 175 } 176 177 public static String getMaxPermissionIdForUserOnWebasset(Inode inode, String userId) { 178 Folder parentFolder = (Folder) InodeFactory.getParentOfClass(inode, Folder.class); 179 180 return getMaxPermissionIdForUserOnFolder(parentFolder, userId); 181 } 182 183 @SuppressWarnings ("unchecked") 184 public static java.util.List getPermissionByRoles(Inode o, Role[] roles) { 185 java.util.List permissions = new java.util.ArrayList (); 186 187 for (int i = 0; i < roles.length; i++) { 188 Role role = (Role) roles[i]; 189 java.util.List rolePermissions = getPermissionsByRole(o, role); 190 java.util.Iterator 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 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 e) { 213 Logger.warn(PermissionFactory.class, "getPermissionsByRole failed:" + e, e); 214 } 215 216 return new java.util.ArrayList (); 217 } 218 219 @SuppressWarnings ("unchecked") 220 public static java.util.Set getReadRolesForAsset(Inode o) { 221 Set readPermissions = new HashSet (); 222 223 try { 224 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 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 e) { 251 Logger.warn(PermissionFactory.class, "getReadRolesForAsset failed:" + e, e); 252 } 253 254 return readPermissions; 255 } 256 257 @SuppressWarnings ("unchecked") 258 public static java.util.Set getWriteRolesForAsset(Inode o) { 259 Set writePermissions = new HashSet (); 260 261 try { 262 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 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 e) { 290 Logger.warn(PermissionFactory.class, "getWriteRolesForAsset failed:" + e, e); 291 } 292 293 return writePermissions; 294 } 295 296 @SuppressWarnings ("unchecked") 297 public static java.util.Set getPublishRolesForAsset(Inode o) { 298 Set publishPermissions = new HashSet (); 299 300 try { 301 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 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 e) { 328 Logger.warn(PermissionFactory.class, "getPublishRolesForAsset failed:" + e, e); 329 } 330 331 return publishPermissions; 332 } 333 334 public static java.util.List getPermissions(Inode o, String 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 e) { 345 Logger.warn(PermissionFactory.class, "getPermissions failed:" + e, e); 346 } 347 348 return new java.util.ArrayList (); 349 } 350 351 public static Object 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 e) { 359 try { 360 return Inode.class.newInstance(); 361 } catch (Exception ex) { 362 return null; 363 } 364 } 365 } 366 367 public static boolean userHasReadPermission(com.liferay.portal.model.User user, List permissions) { 368 369 try { 370 Role cmsAdminRole = RoleFactory.getCMSAdministratorRole(); 372 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 it = permissions.iterator(); 381 while (it.hasNext()) { 382 String perm = (String ) it.next(); 384 if (String.valueOf(perm).equals(role.getName())) 387 return true; 388 } 389 } 390 } catch (Exception 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 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 roleName) { 421 try { 422 Role adminRole = RoleLocalManagerUtil.getRoleByName(company.getCompanyId(), roleName); 424 425 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 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 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 e) { 450 } 451 } 452 453 public static void addPermissionByRoleName(Inode inode, String roleName) { 454 try { 455 Role adminRole = RoleLocalManagerUtil.getRoleByName(com.dotmarketing.cms.factories.PublicCompanyFactory.getDefaultCompany() 457 .getCompanyId(), roleName); 458 459 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 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 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 e) { 487 488 } 489 } 490 491 public static Set <String > getEmailsWithPermissionOnInode(Inode f, int permissionId) { 492 java.util.List permissions = getPermissionOnInodeOfPermissionType(f, permissionId); 493 Iterator permIterator = permissions.iterator(); 494 Set <String > myEmailList = new HashSet <String >(); 495 496 while (permIterator.hasNext()) { 497 Permission perm = (Permission) permIterator.next(); 498 499 try { 500 Set <User> users = RoleFactory.getUsers(String.valueOf(perm.getRoleId())); 501 Iterator userIterator = users.iterator(); 502 503 while (userIterator.hasNext()) { 504 String myEmail = ((User) userIterator.next()).getEmailAddress(); 505 506 Logger.debug(PermissionFactory.class, "myEmail" + myEmail); 507 508 myEmailList.add(myEmail); 509 } 510 } catch (Exception 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 getEmailsWithRole(String roleId) { 519 Set <String > myEmailList = new HashSet <String >(); 520 521 try { 522 Set <User> users = RoleFactory.getUsers(String.valueOf(roleId)); 523 Iterator userIterator = users.iterator(); 524 525 while (userIterator.hasNext()) { 526 String myEmail = ((User) userIterator.next()).getEmailAddress(); 527 528 Logger.debug(PermissionFactory.class, "myEmail" + myEmail); 529 530 myEmailList.add(myEmail); 531 } 532 } catch (Exception e) { 533 Logger.warn(PermissionFactory.class, "getEmailsWithRole failed.", e); 534 } 535 536 return myEmailList; 537 } 538 539 public static java.util.Set [] getRolesAndUsersWithPermissionOnInode(Inode f, int permissionType) { 540 java.util.List permissions = getPermissionOnInodeOfPermissionType(f, permissionType); 541 Iterator permIterator = permissions.iterator(); 542 java.util.Set [] rolesAndUsers = new java.util.Set [2]; 543 java.util.SortedSet <User> myUserSet = new java.util.TreeSet <User>(); 544 java.util.SortedSet <Role> myRoleSet = new java.util.TreeSet <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 <User> users = RoleFactory.getUsers(String.valueOf(perm.getRoleId())); 558 Iterator userIterator = users.iterator(); 559 560 while (userIterator.hasNext()) { 561 User myUser = (User) userIterator.next(); 562 String myUserFullName = myUser.getFullName(); 563 String 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 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 ("unchecked") 582 public static java.util.List getPermissionOnInodeOfPermissionType(Inode o, int permissionId) { 583 java.util.ArrayList <Permission> perms = new java.util.ArrayList <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 permissions = PermissionCache.getPermissionsFromCache((Identifier) o); 592 Iterator 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 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 userRoles = RoleFactory.getAllRolesForUser(user.getUserId()); 632 633 try { 635 Role cmsAdminRole = RoleFactory.getCMSAdministratorRole(); 636 Iterator 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 e) { 644 e.printStackTrace(); 645 } 646 647 java.util.List permissions = getPermissionOnInodeOfPermissionType(o, permissionId); 648 Iterator 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 e) { 657 Logger.debug(PermissionFactory.class, "doesUserHavePermission failed to find role: " + perm.getRoleId(), e); 658 } 659 } 660 661 return hasPermission; 662 } 663 664 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 list = HTMLPageFactory.getLiveHTMLPages(); 674 675 Iterator 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 getPermissionsFromFolder(Folder folder) { 686 return getPermissions(folder); 687 } 688 689 public static List getPermissionsFromWebAsset(WebAsset webAsset) { 690 return getPermissions(webAsset); 691 } 692 693 public static List 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 toPerms = PermissionFactory.getPermissions(to); 707 java.util.Iterator iterPerms = toPerms.iterator(); 708 while (iterPerms.hasNext()) { 709 PermissionFactory.deletePermission((Permission) iterPerms.next()); 710 } 711 712 java.util.List 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 permissionsToString(List <Permission> permissions) { 723 StringBuffer permissionsSt = new StringBuffer (); 724 for (Permission perm : permissions) { 725 int permission = perm.getPermission(); 726 long roleId = perm.getRoleId(); 727 String st = "P" + roleId + "." + permission + "P "; 728 permissionsSt.append(st); 729 } 730 return permissionsSt.toString(); 731 } 732 733 public static boolean userHasPermission(String permissionsString, int permission, User user) { 734 List <Role> roles = RoleFactory.getAllRolesForUser(user.getUserId()); 735 for (Role role : roles) { 736 String 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 <Permission> getPermissionsNoLock(Inode inode) { 744 try { 745 if (inode.getInode() > 0) { 746 Identifier id = IdentifierFactory.getIdentifierByInodeNoLock(inode); 747 748 if (id.getInode() == 0) { 750 return new ArrayList <Permission>(); 751 } 752 753 DotHibernate dh = new DotHibernate(Permission.class); 754 StringBuffer querie = new StringBuffer (); 755 querie.append("select {permission.*} from permission with(nolock) where inode_id = " + id.getInode()); 756 dh.setSQLQuery(querie.toString()); 757 758 List <Permission> permissions = (List <Permission>) dh.list(); 759 760 return permissions; 761 } 762 } catch (Exception e) { 763 Logger.warn(PermissionFactory.class, "getPermissions failed:" + e, e); 764 } 765 return new ArrayList <Permission>(); 766 } 767 768 public static List <Role> getAllRolesWithPermissionOver(Inode asset_inode, int permission) { 769 List <Role> rolesList = new ArrayList (); 770 java.util.List <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 () { 785 public int compare(Object arg0, Object 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 |