0

GrailsアプリケーションにSpringセキュリティコアプラグインを統合しました。

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

これは、ログインに成功した後にデフォルトのホームページを設定するために私が行ったことです。ただし、ユーザーの役割に応じてホームページを変えたい

現在、2つのユーザーロールがあります1) "ROLE_ADMIN" 2) "ROLE_USER"

これをどのように実装しますか?

4

2 に答える 2

6

簡単な方法の1つは、コントローラーアクションでロジックを実行することです。たとえば、homeアクションは役割に基づいて異なるビューをレンダリングできます。たとえば、次のようになります。

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: [...]
   }
}

ロジックを異なるコントローラーに分散させたい場合は、役割に基づいてリダイレクトできます。

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
      }
      // ???
   }
}
于 2013-02-03T20:07:10.183 に答える
0

ロールに基づいてユーザーを特定のコントローラーにリダイレクトする認証成功ハンドラーを構成することもできます。

class CustomAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    LinkGenerator linkGenerator
    private static final ADMIN_ROLE = 'ROLE_Admin'


    @Override
    protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) {
        if(SpringSecurityUtils.ifAllGranted(ADMIN_ROLE)) {
            return linkGenerator.link(controller: 'admin', action: "index")
        }

        return super.determineTargetUrl(request, response);
    }

}

Spring Security Core:役割に基づいてユーザーを別の画面にリダイレクトするを参照してください

于 2017-07-16T13:53:01.877 に答える