Changeset 5077
- Timestamp:
- Aug 26, 2009, 2:03:37 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/common-queries.xml
r5063 r5077 3609 3609 </description> 3610 3610 </query> 3611 <query id="SET_HIDDENMEMBERS_ON_GROUPS" type="HQL"> 3612 <sql> 3613 UPDATE GroupData grp 3614 SET grp.hiddenMembers = :hiddenMembers 3615 WHERE grp.hiddenMembers IS NULL 3616 </sql> 3617 <description> 3618 An HQL query that sets the hiddenMembers flag on all 3619 groups with a null value. 3620 </description> 3621 </query> 3622 <query id="GET_GROUPS_WITH_NONHIDDENMEMBERS" type="HQL"> 3623 <sql> 3624 SELECT grp.id 3625 FROM GroupData grp 3626 WHERE grp.hiddenMembers = false 3627 AND grp.id IN (:groups) 3628 </sql> 3629 <description> 3630 A HQL query that selects the ID of the groups among a given set of 3631 groups that has 'hiddenMembers=false' 3632 </description> 3633 </query> 3611 3634 3612 3635 </predefined-queries> -
trunk/src/core/net/sf/basedb/core/Group.java
r4889 r5077 396 396 } 397 397 getData().setDefault(isDefault); 398 } 399 400 /** 401 Does this group have hidden members? In a group with hidden members 402 one user doesn't get read permission to other members of the same 403 group. 404 @return TRUE if the members are hidden 405 @since 2.13 406 */ 407 public boolean hasHiddenMembers() 408 { 409 return getData().getHiddenMembers(); 410 } 411 412 /** 413 Set the hidden members flag for this group. 414 @throws PermissionDeniedException If the logged in user doesn't 415 have {@link Permission#WRITE} permission for the group, or if 416 this group is the {@link #EVERYONE} group 417 @since 2.13 418 */ 419 public void setHiddenMembers(boolean hiddenMembers) 420 { 421 checkPermission(Permission.WRITE); 422 if (getId() == SystemItems.getId(EVERYONE)) 423 { 424 throw new PermissionDeniedException("Not allowed to add members to the EVERYONE group."); 425 } 426 getData().setHiddenMembers(hiddenMembers); 398 427 } 399 428 -
trunk/src/core/net/sf/basedb/core/Install.java
r5056 r5077 114 114 method. 115 115 */ 116 public static final int NEW_SCHEMA_VERSION = Integer.valueOf(7 4).intValue();116 public static final int NEW_SCHEMA_VERSION = Integer.valueOf(75).intValue(); 117 117 118 118 public static synchronized void createTables(boolean update, final ProgressReporter progress) … … 229 229 230 230 if (progress != null) progress.display((int)(5*progress_factor), "--Creating groups..."); 231 GroupData groupEveryone = createGroup(Group.EVERYONE, "Everyone", false, "Everyone are members of this group.");231 GroupData groupEveryone = createGroup(Group.EVERYONE, "Everyone", false, true, "Everyone are members of this group."); 232 232 233 233 if (progress != null) progress.display((int)(6*progress_factor), "--Creating keys..."); … … 1189 1189 Create a {@link Group}. 1190 1190 */ 1191 private static GroupData createGroup(String systemId, String name, boolean isDefault, String description) 1191 private static GroupData createGroup(String systemId, String name, boolean isDefault, 1192 boolean hiddenMembers, String description) 1192 1193 throws BaseException 1193 1194 { … … 1215 1216 // Set default property if upgrading 1216 1217 group.setDefault(isDefault); 1218 } 1219 if (schemaVersion.getSchemaVersion() < 75) 1220 { 1221 // Set default property if upgrading 1222 group.setHiddenMembers(hiddenMembers); 1217 1223 } 1218 1224 log.info("createGroup: EXISTS [SYSTEM ID="+systemId+"; name="+name+"]"); … … 1227 1233 group.setDescription(description); 1228 1234 group.setDefault(isDefault); 1235 group.setHiddenMembers(hiddenMembers); 1229 1236 HibernateUtil.saveData(session, group); 1230 1237 HibernateUtil.commit(tx); -
trunk/src/core/net/sf/basedb/core/Keyring.java
r4889 r5077 114 114 */ 115 115 private Set<Integer> groups; 116 117 /** 118 A subset of the 'groups' set that holds the id of the groups 119 that has hiddenMembers = false 120 */ 121 private Set<Integer> groupsWithNonHiddenMembers; 116 122 117 123 /** … … 227 233 this.projectPermissions = parent.projectPermissions; 228 234 this.groups = parent.groups; 235 this.groupsWithNonHiddenMembers = parent.groupsWithNonHiddenMembers; 229 236 this.users = parent.users; 230 237 this.projects = parent.projects; … … 332 339 /** 333 340 Loads group membership for the user and put that information 334 in the {@link #groups} variable.341 in the {@link #groups} and {@link #groupsWithNonHiddenMembers} variables. 335 342 */ 336 343 private void loadGroups(org.hibernate.Session session) … … 379 386 temp.add(EVERYONE); 380 387 groups = Collections.unmodifiableSet(temp); 388 389 // Load the subset of groups that has hiddenMembers = false 390 query = HibernateUtil.getPredefinedQuery(session, "GET_GROUPS_WITH_NONHIDDENMEMBERS"); 391 /* 392 SELECT grp.id 393 FROM GroupData grp 394 WHERE grp.hiddenMembers = false 395 AND grp.id IN (:groups) 396 */ 397 query.setParameterList("groups", groups, org.hibernate.Hibernate.INTEGER); 398 temp = new HashSet<Integer>(HibernateUtil.loadList(Integer.class, query, null)); 399 groupsWithNonHiddenMembers = Collections.unmodifiableSet(temp); 381 400 } 382 401 catch (HibernateException ex) … … 459 478 try 460 479 { 461 if (groups .size() > 0)480 if (groupsWithNonHiddenMembers.size() > 0) 462 481 { 463 482 // Get the users which are members of the same groups 464 org.hibernate.Query query = HibernateUtil.getPredefinedQuery(session, "GET_USER_IDS_FOR_GROUPS"); 465 /* 466 SELECT ug.userId 467 FROM UserGroups ug 468 WHERE ug.groupId IN (:groups) 469 */ 470 query.setParameterList("groups", groups, org.hibernate.Hibernate.INTEGER); 471 temp.addAll(HibernateUtil.loadList(Integer.class, query, null)); 472 473 // Get the users that have a quota group among the same groups 474 query = HibernateUtil.getPredefinedQuery(session, "GET_USER_IDS_FOR_QUOTAGROUPS"); 475 /* 476 SELECT usr.id 477 FROM UserData usr 478 WHERE usr.quotaGroup.id IN (:groups) 479 */ 480 query.setParameterList("groups", groups, org.hibernate.Hibernate.INTEGER); 481 temp.addAll(HibernateUtil.loadList(Integer.class, query, null)); 483 temp.addAll(User.getAllMembers(session, groupsWithNonHiddenMembers)); 482 484 } 483 485 … … 508 510 // Load the direct groups and subgroups 509 511 Set<Integer> projectGroups = Group.getGroupsRecursive(session, HibernateUtil.loadList(Integer.class, query, null)); 510 512 513 // Finally, filter away groups that has hiddenMembers=true 514 query = HibernateUtil.getPredefinedQuery(session, "GET_GROUPS_WITH_NONHIDDENMEMBERS"); 515 /* 516 SELECT grp.id 517 FROM GroupData grp 518 WHERE grp.hiddenMembers = false 519 AND grp.id IN (:groups) 520 */ 521 query.setParameterList("groups", projectGroups, org.hibernate.Hibernate.INTEGER); 522 projectGroups.retainAll(HibernateUtil.loadList(Integer.class, query, null)); 523 511 524 // Load users that are members of the project groups 512 temp.addAll(User.getAllMembers(session, projectGroups)); 513 525 temp.addAll(User.getAllMembers(session, projectGroups)); 514 526 } 515 527 users = Collections.unmodifiableSet(temp); … … 894 906 } 895 907 896 Set<Integer> getGroups( )908 Set<Integer> getGroups(boolean onlyWithNonHiddenMembers) 897 909 { 898 910 if (getReload()) reload(); 899 return groups; 900 } 901 911 return onlyWithNonHiddenMembers ? groupsWithNonHiddenMembers : groups; 912 } 913 914 /** 915 Get all users that share group membership with the logged in user. 916 Only groups membership in groups that has hiddenMembers=false are 917 considered. 918 */ 902 919 Set<Integer> getUsers() 903 920 { -
trunk/src/core/net/sf/basedb/core/SessionControl.java
r5043 r5077 1058 1058 public boolean isMemberOf(Group group) 1059 1059 { 1060 return loginInfo == null ? false : loginInfo.keyring.getGroups( ).contains(group.getId());1060 return loginInfo == null ? false : loginInfo.keyring.getGroups(false).contains(group.getId()); 1061 1061 } 1062 1062 … … 1113 1113 public Set<Integer> getGroups() 1114 1114 { 1115 return loginInfo == null ? null : loginInfo.keyring.getGroups( );1115 return loginInfo == null ? null : loginInfo.keyring.getGroups(false); 1116 1116 } 1117 1117 -
trunk/src/core/net/sf/basedb/core/Update.java
r5056 r5077 43 43 import net.sf.basedb.core.data.FileData; 44 44 import net.sf.basedb.core.data.FormulaData; 45 import net.sf.basedb.core.data.GroupData; 45 46 import net.sf.basedb.core.data.JobData; 46 47 import net.sf.basedb.core.data.MeasuredBioMaterialData; … … 831 832 </td> 832 833 </tr> 834 <tr> 835 <td>75</td> 836 <td> 837 Added {@link GroupData#getHiddenMembers()}. 838 The update sets the value for all existing groups to false. 839 </td> 840 </tr> 833 841 </table> 834 842 … … 1113 1121 } 1114 1122 1115 // Schemaversion 61-7 4only updates the version number1116 if (schemaVersion < 7 4)1117 { 1118 if (progress != null) progress.display((int)(7 3*progress_factor), "--Updating schema version: " + schemaVersion + " -> 74...");1119 schemaVersion = setSchemaVersionInTransaction(session, 7 4);1123 // Schemaversion 61-75 only updates the version number 1124 if (schemaVersion < 75) 1125 { 1126 if (progress != null) progress.display((int)(74*progress_factor), "--Updating schema version: " + schemaVersion + " -> 75..."); 1127 schemaVersion = setSchemaVersionInTransaction(session, 75); 1120 1128 } 1121 1129 … … 3037 3045 } 3038 3046 3047 if (schemaVersion < 75) 3048 { 3049 // Set hiddenMembers=false on all groups 3050 org.hibernate.Query query = HibernateUtil.getPredefinedQuery(session, 3051 "SET_HIDDENMEMBERS_ON_GROUPS"); 3052 /* 3053 UPDATE GroupData grp 3054 SET grp.hiddenMembers = :hiddenMembers 3055 WHERE grp.hiddenMembers IS NULL 3056 */ 3057 query.setBoolean("hiddenMembers", false); 3058 HibernateUtil.executeUpdate(query); 3059 } 3060 3039 3061 // Commit the changes 3040 3062 HibernateUtil.commit(tx); -
trunk/src/core/net/sf/basedb/core/data/GroupData.java
r4889 r5077 228 228 } 229 229 230 private boolean hiddenMembers; 231 /** 232 A flag indicating if members of the group should be hidden 233 to each other or not. 234 @since 2.13 235 @hibernate.property column="`hidden_members`" type="boolean" not-null="true" 236 */ 237 public boolean getHiddenMembers() 238 { 239 return hiddenMembers; 240 } 241 public void setHiddenMembers(boolean hiddenMembers) 242 { 243 this.hiddenMembers = hiddenMembers; 244 } 245 246 230 247 } -
trunk/src/test/TestGroup.java
r4889 r5077 93 93 g.setName("Test group"); 94 94 g.setDescription("Added at "+new Date()); 95 g.setHiddenMembers(true); 95 96 } 96 97 dc.saveItem(g); … … 193 194 if (!TestUtil.getSilent()) 194 195 { 195 write(" \tID \tName \t Description");196 write("-- \t-- \t--------- \t----------- ");196 write(" \tID \tName \tHidden members\tDescription"); 197 write("-- \t-- \t--------- \t--------------\t-----------"); 197 198 } 198 199 } … … 200 201 throws BaseException 201 202 { 202 if (!TestUtil.getSilent()) System.out.println(i+":\t"+g.getId()+"\t"+g.getName()+"\t"+g.getDescription()); 203 if (!TestUtil.getSilent()) 204 { 205 System.out.println(i+":\t"+g.getId()+"\t"+g.getName()+"\t" + g.hasHiddenMembers() + 206 "\t"+g.getDescription()); 207 } 203 208 } 204 209 static void write_item(int i, User u) -
trunk/www/admin/groups/edit_group.jsp
r4889 r5077 69 69 boolean isEveryone = false; 70 70 boolean isDefault = false; 71 boolean hiddenMembers = false; 71 72 final QuotaType total = QuotaType.getById(dc, SystemItems.getId(QuotaType.TOTAL)); 72 73 Quota currentQuota = null; … … 94 95 } 95 96 isDefault = Values.getBoolean(cc.getPropertyValue("default"), false); 97 hiddenMembers = Values.getBoolean(cc.getPropertyValue("hiddenMembers"), false); 96 98 } 97 99 else … … 102 104 isEveryone = Group.EVERYONE.equals(group.getSystemId()); 103 105 isDefault = group.isDefault(); 106 hiddenMembers = group.hasHiddenMembers(); 104 107 105 108 try … … 271 274 <input type="radio" name="is_default" value="0" <%=!isDefault ? "checked" : ""%>>no 272 275 <input type="radio" name="is_default" value="1" <%=isDefault ? "checked" : ""%>>yes 276 </td> 277 </tr> 278 <tr> 279 <td class="prompt">Hidden members</td> 280 <td> 281 <input type="radio" name="hidden_members" value="0" <%=!hiddenMembers ? "checked" : ""%>>no 282 <input type="radio" name="hidden_members" value="1" <%=hiddenMembers ? "checked" : ""%>>yes 273 283 </td> 274 284 </tr> -
trunk/www/admin/groups/index.jsp
r5060 r5077 173 173 group.setDescription(Values.getStringOrNull(request.getParameter("description"))); 174 174 group.setDefault(Values.getBoolean(request.getParameter("is_default"), false)); 175 group.setHiddenMembers(Values.getBoolean(request.getParameter("hidden_members"), false)); 175 176 int quotaId = Values.getInt(request.getParameter("quota_id"), -1); 176 177 if (quotaId >= 0) // < 0 = denied or unchanged -
trunk/www/admin/groups/list_groups.jsp
r4906 r5077 267 267 datatype="boolean" 268 268 title="Is default" 269 sortable="true" 270 filterable="true" 271 exportable="true" 272 /> 273 <tbl:columndef 274 id="hiddenMembers" 275 property="hiddenMembers" 276 datatype="boolean" 277 title="Hidden members" 269 278 sortable="true" 270 279 filterable="true" … … 456 465 /></tbl:cell> 457 466 <tbl:cell column="isDefault"><%=item.isDefault() ? "yes" : "no" %></tbl:cell> 467 <tbl:cell column="hiddenMembers"><%=item.hasHiddenMembers() ? "yes" : "no" %></tbl:cell> 458 468 <tbl:cell column="description"><%=HTML.encodeTags(item.getDescription())%></tbl:cell> 459 469 <tbl:cell column="groups"> -
trunk/www/admin/groups/view_group.jsp
r5042 r5077 229 229 <td class="prompt">Is default</td> 230 230 <td><%=group.isDefault() ? "yes" : "no"%></td> 231 </tr> 232 <tr> 233 <td class="prompt">Hidden members</td> 234 <td><%=group.hasHiddenMembers() ? "yes" : "no"%></td> 231 235 </tr> 232 236 <tr>
Note: See TracChangeset
for help on using the changeset viewer.