I have implemented dynamic menu rendering, based on user roles, that the user can assign himself. Here are the necessary changes:
DB: add column 'role' of type varchar (3) to table 'role' set sort column for roles USER_ROLE and ADMIN_ROLE to "sys" to indicate these roles are system roles and may not be added / removed by the user add role ROLE_SOMETHING, "User definable role", "usr" <-- To indicate this role may be added / removed by the user Role.java: Change constructor to: public Role(final String name, String sort) { this.name = name; this.sort = sort; } ADD: // @Column(length = 3) public String getSort() { return this.sort; } public void setSort(String string) { sort = string; UserSecurityAdvice: Change to: // get the list of roles the user has Set<Role> currentRoles = new HashSet<Role>(); for (GrantedAuthority role : roles) { currentRoles.add((Role) role); } Boolean modifySystemRole = false; // determine the list of roles the wants to have if (user.getRoles() != null) { // check the list of roles the user wants to remove for (Object o : user.getRoles()) { Role role = (Role) o; // check if the user tries to remove a system role - this is forbidden if (role.getSort().equalsIgnoreCase("sys") && !currentRoles.contains(role)) { modifySystemRole = true; } } // check the list of roles the user wants to add for (Object o : currentRoles) { Role role = (Role) o; // check if the user tries to add a system role - this is forbidden if (role.getSort().equalsIgnoreCase("sys") && !user.getRoles().contains(role)) { modifySystemRole = true; } } } // regular users aren't allowed to change system roles if (modifySystemRole) { log.warn("Access Denied: '" + currentUser.getUsername() + "' tried to change system role(s)!"); throw new AccessDeniedException(ACCESS_DENIED); } UserSecurityAdviceTest.java: Change all user.addRole(new Role(Constants.ADMIN_ROLE)); TO user.addRole(new Role(Constants.ADMIN_ROLE,"sys")); user.addRole(new Role(Constants.USER_ROLE)); TO user.addRole(new Role(Constants.USER_ROLE,"usr")); Other test and java classes: same change as the one directly above. Implementation: implement for instance a checkbox and add / remove ROLE_SOMETHING according to chekbox setting. Note: as for now the dynamic rendering works only on main menu entries, but it does not work well for menu sub items. -- View this message in context: http://www.nabble.com/dynamic-menu-rendering-based-on-user-roles-tp25513990s2369p25513990.html Sent from the AppFuse - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@appfuse.dev.java.net For additional commands, e-mail: users-h...@appfuse.dev.java.net