Search code examples
grailsspring-security

Spring security core plugin: Different home page for user depending upon its Role


I have integrated Spring security core plugin in my Grails application.

grails.plugins.springsecurity.successHandler.defaultTargetUrl = "/user/home"

This is what I have done to set default home page after successful login. But I would like to have different home page depending upon user roles

Currently I have 2 user roles 1)"ROLE_ADMIN" 2)"ROLE_USER"

How would I implement this?


Solution

  • One quick way would be to do the logic in the controller action. For example, the home action could render a different view based on role, e.g.:

    import grails.plugin.springsecurity.annotation.Secured
    
    class UserController {
       def home() {
          String view
          if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')) {
             view = 'admin'
          }
          else if (SpringSecurityUtils.ifAllGranted('ROLE_USER')) {
             view = 'user'
          }
          else {
             // ???
          }
    
          render view: view, model: [...]
       }
    }
    

    If you want to distribute the logic among different controllers, you could redirect based on role:

    import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
    
    class UserController {
       def home() {
          if (SpringSecurityUtils.ifAllGranted('ROLE_ADMIN')) {
             redirect controller: '...', action: '...'
             return
          }
          if (SpringSecurityUtils.ifAllGranted('ROLE_USER')) {
             redirect controller: '...', action: '...'
             return
          }
          // ???
       }
    }