圣杯 3;通过 Spring 安全查看您自己的数据
grails 3; Seeing your own data with Spring Security
Grails:3.3.0
Spring 安全性:3.2.0.M1
我对此做了一些研究,我发现来自 (Seeing only your own data in Grails) post 的答案可能是我正在寻找的答案,但不知何故它不起作用。
这就是我捕获登录用户并尝试过滤掉的方式,只让登录用户查看他自己的数据。
(这是我的任务控制器)
顺便问下[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]
}
请给我一些建议或者让我知道我哪里错了!
提前致谢!
最好的问候,熙
我认为您的要求与 Spring 安全无关。
关于 "By the way what is the use of [tasks:tasks]" - 看起来你在代码中有两个 return 点,所以你需要修复它 - 在 groovy 中你可以省略 "return"如果你在最后一行 - 所以我假设这一行是包含任务列表的模型的 return - 但代码在它之后继续......
如果任何任务属于用户,那么您应该使用:
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
然后 return 数据 + 任何其他数据,如计数等
你可以考虑不使用多个 belongsTo 它会使你的模型过于复杂而不需要:
static belongsTo =[Project,Pic,User]
在任务属于用户的情况下,您可以为每个任务保留用户 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.
顺便说一句,在域模型中保留服务不是一个好的做法 - 通过将服务注入到您的控制器/服务中来使用该服务
transient springSecurityService
我已经通过在 gsp 呼叫 "tasks" 完成了。它对我有用
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
然后我就从我的域中调用 class ${tasks}
Grails:3.3.0 Spring 安全性:3.2.0.M1
我对此做了一些研究,我发现来自 (Seeing only your own data in Grails) post 的答案可能是我正在寻找的答案,但不知何故它不起作用。
这就是我捕获登录用户并尝试过滤掉的方式,只让登录用户查看他自己的数据。 (这是我的任务控制器) 顺便问下[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]
}
请给我一些建议或者让我知道我哪里错了! 提前致谢! 最好的问候,熙
我认为您的要求与 Spring 安全无关。
关于 "By the way what is the use of [tasks:tasks]" - 看起来你在代码中有两个 return 点,所以你需要修复它 - 在 groovy 中你可以省略 "return"如果你在最后一行 - 所以我假设这一行是包含任务列表的模型的 return - 但代码在它之后继续......
如果任何任务属于用户,那么您应该使用:
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
然后 return 数据 + 任何其他数据,如计数等
你可以考虑不使用多个 belongsTo 它会使你的模型过于复杂而不需要:
static belongsTo =[Project,Pic,User]
在任务属于用户的情况下,您可以为每个任务保留用户 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.
顺便说一句,在域模型中保留服务不是一个好的做法 - 通过将服务注入到您的控制器/服务中来使用该服务
transient springSecurityService
我已经通过在 gsp 呼叫 "tasks" 完成了。它对我有用
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
然后我就从我的域中调用 class ${tasks}