Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 根据用户角色访问数据库。在此处使用过滤器以确保安全_Grails_Datasource - Fatal编程技术网

Grails 根据用户角色访问数据库。在此处使用过滤器以确保安全

Grails 根据用户角色访问数据库。在此处使用过滤器以确保安全,grails,datasource,Grails,Datasource,在我的grails应用程序中使用简单的登录和安全过滤器。 现在,我需要根据登录的用户角色使用不同的登录凭据连接到db-test1。如果管理员登录时获得写入权限,那么不同的登录名&如果用户角色登录时为只读。 如何用过滤器实现它 DataSource.groovy environments { development { /*IF LOGIN 'ADMIN' - SHOULD CONNECT USING THIS dataSource { username = 'adm

在我的grails应用程序中使用简单的登录和安全过滤器。 现在,我需要根据登录的用户角色使用不同的登录凭据连接到db-test1。如果管理员登录时获得写入权限,那么不同的登录名&如果用户角色登录时为只读。 如何用过滤器实现它

DataSource.groovy

 environments {
 development {

/*IF LOGIN 'ADMIN' - SHOULD CONNECT USING THIS
 dataSource {
           username = 'admin'
           password = 'Guard1an'
           url = "jdbc:jtds:sqlserver://test1:1433;
           MVCC=TRUE"
           dbCreate = 'update'
       }
/*IF LOGIN 'USER' - SHOULD CONNECT USING THIS*/

 dataSource {           
              dbCreate = "update" // one of 'create', 'create-drop','update'
              username = 'user'
              password = 'tesoyear'
              url = "jdbc:jtds:sqlserver://test1:1433;
        }
dataSource_wldb1 {
            username = 'gdx'
            password = 'pinoil'
            url = "jdbc:jtds:sqlserver://wldb:1433/IVR_GUARDIAN"
            dbCreate = 'update'
    }
}
secuityfilter.groovy

   class SecurityFilters {
   def filters = {
   loginCheck(controller: 'load', action: '*') {
       before = {
          if (!session.user && !actionName.equals('login')) {
              flash.message = "User is not Logged in.Please login "
              redirect(controller:'user', action: 'index')
              return false
           }
       }
    }

  }
}

如果您想保护控制器,那么使用@Secured注释就足够了(而且更好)。这允许您通过指定所需的用户角色来保护整个控制器或单个方法。查看更多详细信息。下面还有一个例子

如果您需要更复杂的安全性,请检查SpringSecurityACLPlugin,它允许为特定的数据库对象授予权限

package org.example

import grails.plugins.springsecurity.Secured

class PostController {

    @Secured(['ROLE_USER'])
    def followAjax = { ... }

    @Secured(['ROLE_USER', 'IS_AUTHENTICATED_FULLY'])
    def addPostAjax = { ... }

    def global = { ... }

    @Secured(['ROLE_USER'])
    def timeline = { ... }

    @Secured(['IS_AUTHENTICATED_REMEMBERED'])
    def personal = { ... }
}

好的,谢谢你的回复,但我并没有使用SpringSecurity插件,所以我想用简单的过滤器来实现它(参见我上面的代码)。没有插件是否可能?我写这个答案是因为有一个标签“SpringSecurity”。如果会话中已经有用户(您在筛选器中将其用作
会话.user
?),那么只需查询某些数据库/文件中的用户角色即可。您现在的问题到底是什么?请查看my datasource.groovy。这是在用户登录前运行应用程序项目时加载的&会话中的角色,因此我想做一些事情,以便datasource根据登录的rle为DB连接使用单独的凭据。去哪里做是我真正的问题。对不起,我不明白你的问题。你可以检查你的问题。希望这有帮助。