Do you have a use case that requires allowing users to assign themselves
roles?

The reason I ask is this typically seems like something an administrator
would do.

Thanks,

Matt

On Fri, Sep 18, 2009 at 1:11 PM, measwel <marek_karczew...@yahoo.com.au>wrote:

>
> 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
>
>

Reply via email to