grails 3;使用Spring Security查看您自己的数据

时间:2017-09-05 06:45:11

标签: spring grails grails-domain-class grails-controller grails3

Grails:3.3.0 Spring Security:3.2.0.M1

我已经对此做了一些研究,我发现(Seeing only your own data in Grails)帖子的回答可能是我正在寻找的答案,但不知何故它不起作用。

这是我捕获登录用户并尝试过滤掉的方法,只是让登录用户查看自己的数据。 (这是我的任务控制器) 顺便说一句 [任务:任务] 的用途是什么

def index(Integer max) {

    def authenticated = getAuthenticatedUser().username
    def tasks = User.findAllByUsername(authenticated)
    [tasks: tasks]
    params.max = Math.min(max ?: 10, 100)
    respond Task.list(params), model:[tasks: Task.count()]
}

这是我的任务域

class Task {

    transient springSecurityService
    
    String task
    Project project
    Pic picName
   
    static hasMany = [subTask:Subtask]
    static belongsTo =[Project,Pic,User]
    }
    

请给我一些建议或者告诉我哪里弄错了! 提前致谢! 最诚挚的问候,嗨

2 个答案:

答案 0 :(得分:0)

我不认为您的要求与Spring Security无关。

关于“顺便使用什么[任务:任务]” - 看起来你在代码中有两个返回点,所以你需要修复它 - 在groovy你可以省略“返回”如果你在最后一行 - 所以我假设这一行是包含任务列表的模型的返回 - 但代码在它之后继续......

  1. 如果任何任务属于用户,那么你应该使用:

    User user = getAuthenticatedUser() // method for getting the curren user
    params.max = Math.min(max ?: 10, 100) // any query params you want to add
    def tasks = Task.findAllByUser(user, params) //get the user Tasks using the query params
    
  2. 然后返回数据+任何其他数据,如计数等。

    1. 您可以考虑不使用多个belongsTo它会使您的模型过于复杂而不需要:

      static belongsTo =[Project,Pic,User]
      

      如果Task属于用户,您可以保留每个任务的用户ID或用户名,然后通过此属性进行查询 - 例如:

      class Task {
      
      transient springSecurityService 
      
      String username  // not unique
      String task
      Project project
      Pic picName
      
      static hasMany = [subTask:Subtask]
      static belongsTo =[Project,Pic]
      }
      
      def username = getAuthenticatedUser().username // method for getting the current username.
      params.max = Math.min(max ?: 10, 100) // any query params you want to add.
      def tasks = Task.findAllByUsername(username, params) get the user Tasks using the query params.
      
    2. BTW在域模型中保留服务不是一个好习惯 - 通过将其注入您的控制器/服务来使用该服务

      transient springSecurityService
      

答案 1 :(得分:0)

我通过调出"任务"在gsp。它为我工作



 def     authenticated = getAuthenticatedUser().username
        
        def     tasks = Task.findAllByLogginUser(authenticated)
        
        params.max = Math.min(max ?: 10, 100)
        respond Task.list(params), model:[tasks:tasks] // [tasks:tasks] is to passing tasks into my domain




然后我只是从我的域类$ {tasks}

中调用