如何限制用户访问控制器的特定操作?

发布于 2024-11-07 15:40:21 字数 739 浏览 0 评论 0原文

 def filters = {
   loginCheck(controller:'*', action:'*') {
        before = {
           if(!session.user && !session.merchants) 
           {
               redirect(action:'login')
               return false
            }
        }}

这是我的登录安全过滤器。下面是用于限制用户搜索操作的拦​​截器。但两者都不起作用。谁能告诉我错误是什么吗?

def beforeInterceptor = [action:this.&checkUser,Only:'search']

    def scaffold = true
    def checkUser() 
    {
        if (session.user)
        {
            redirect(action:"search")
        }
        if(session.merchants)
        {
        redirect(action:"toIndex")
        flash.message="You are not valid user for this action"
        return false
        }   
    }
 def filters = {
   loginCheck(controller:'*', action:'*') {
        before = {
           if(!session.user && !session.merchants) 
           {
               redirect(action:'login')
               return false
            }
        }}

That was my filter for login security. And below is interceptor in action for restricting user from search action. But both are not working. Can any one tell what the mistake is?

def beforeInterceptor = [action:this.&checkUser,Only:'search']

    def scaffold = true
    def checkUser() 
    {
        if (session.user)
        {
            redirect(action:"search")
        }
        if(session.merchants)
        {
        redirect(action:"toIndex")
        flash.message="You are not valid user for this action"
        return false
        }   
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

欢你一世 2024-11-14 15:40:21

有一个非常好的简写方式,您可以直接应用于操作(如果您不使用过滤器):

@Secured(['ROLE_USER'])
def search = {

}

您可以为每个用户授予 ROLE_USER 并简单地要求该角色。

There's a really nice shorthand that you can apply directly to actions (if you're not using filters):

@Secured(['ROLE_USER'])
def search = {

}

You can give every user ROLE_USER and simply require that role.

末骤雨初歇 2024-11-14 15:40:21

实际上,您的过滤器应该按照为每个控制器和每个操作设置的方式工作。
这是参考文献中的 grails 示例:

class SecurityFilters {
   def filters = {
       loginCheck(controller:'*', action:'*') {
           before = {
              if(!session.user && !actionName.equals('login')) {
                  redirect(action:'login')
                  return false
               }
           }
       }
   }
}

我使用过这个,它对我有用。
我不确定代码中的 session.merchants
这是什么?

你有没有遵循这个:

要创建过滤器,请创建一个类
以约定结束 Filters in
grails-app/conf 目录。


编辑:
如果您使用 spring security,则不需要添加过滤器或拦截器。
检查用户指南:http://burtbeckwith.github。 com/grails-spring-security-core/docs/manual/index.html

您可以使用 url 映射或注释来配置它。

前任。

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
   '/js/admin/**': ['ROLE_ADMIN'],
   '/someplugin/**': ['ROLE_ADMIN']
]

编辑2:

要获取登录用户,请使用:

 def authenticateService

...
def action{
     def user = authenticateService.principal() 
     def username = user?.getUsername()
...

actually you filter should work as it is set for every controller and every action.
here is the grails example from the reference:

class SecurityFilters {
   def filters = {
       loginCheck(controller:'*', action:'*') {
           before = {
              if(!session.user && !actionName.equals('login')) {
                  redirect(action:'login')
                  return false
               }
           }
       }
   }
}

I worked with this one and it worked for me.
What I'm not sure is about the session.merchants in your code.
What is this ?

Did you follow this:

To create a filter create a class that
ends with the convention Filters in
the grails-app/conf directory.


Edit:
If you use spring security you don't need to add a filter or interceptor.
check the user guide: http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html

you can configure it with url mappings or annotations.

ex.

grails.plugins.springsecurity.controllerAnnotations.staticRules = [
   '/js/admin/**': ['ROLE_ADMIN'],
   '/someplugin/**': ['ROLE_ADMIN']
]

EDIT 2:

To get the logged in user use:

 def authenticateService

...
def action{
     def user = authenticateService.principal() 
     def username = user?.getUsername()
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文