грааль 3; Просмотр собственных данных с помощью Spring Security

Grails: 3.3.0 Spring Безопасность: 3.2.0.M1

Я провел некоторое исследование по этому вопросу и нашел этот ответ из (Видя только ваши собственные данные в Grails) может быть ответом, который я ищу, но почему-то он не работает.

This is how I capture the logged-in user and try to filter out and just to let logged-in user to view his own data. (This is my Task controller) By the way what is the use of [tasks:tasks]

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]
    }
    

Пожалуйста, дайте мне какое-нибудь предложение или, пожалуйста, дайте мне знать, где я сделал ошибку! Заранее спасибо! С уважением, Хи


person Trainee    schedule 05.09.2017    source источник


Ответы (2)


Я не думаю, что ваше требование не связано с 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
    

затем верните данные + любые другие данные, такие как количество и т. д.

  1. вы можете подумать о том, чтобы не использовать множественные принадлежности. Это делает вашу модель слишком сложной без необходимости:

    static belongsTo =[Project,Pic,User]
    

    в случае, если задача принадлежит пользователю, вы можете сохранить идентификатор пользователя или имя пользователя для каждой задачи, а затем выполнить запрос по этому свойству, например:

    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. Кстати, сохранение службы в модели домена не является хорошей практикой - используйте службу, внедрив ее в свой контроллер/службу.

    transient springSecurityService
    
person Meni Lubetkin    schedule 05.09.2017
comment
Спасибо за ответ ! На самом деле моя проблема в том, что я просто не указал это в своем GSP. И правда спасибо за советы - person Trainee; 08.09.2017

Я сделал это, вызвав «задачи» в 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}

person Trainee    schedule 08.09.2017