gpt4 book ai didi

grails - Shiro - 如何有效地选择用户有权访问的所有资源?

转载 作者:行者123 更新时间:2023-12-02 00:04:07 25 4
gpt4 key购买 nike

我实现了一项服务,用户可以上传文件(这里称为服务)来分析它们。每个注册用户只能访问他上传的文件。

因此,在上传文件后,我授予用户对该文件的通配符权限:

def currentUser = SecurityUtils.subject

if (currentUser.isAuthenticated()) {
def user = User.findByUsername(currentUser.principal)
user.addToPermissions("service:*:$serviceId")
user.save()
}

访问文件时,我会检查当前登录的用户是否有打开该文件的权限:

SecurityUtils.subject.checkPermission("service:*:$id")

这似乎一切正常,但现在我想为登录用户提供一种列出他所有上传文件的方法。为此,我得到用户,获得他的所有权限,提取 ID,然后搜索文件:

    def user = User.findByUsername(SecurityUtils.subject.principal)
def serviceIds = user.permissions.collect { it.split(':').last().toLong() }

[services: Service.findAllByIdInList(serviceIds)]

虽然这可行,但效率似乎非常低。什么是更好的实现方式?也许在用户和文件之间建立关系?

最佳答案

你可以像你说的那样在 User 之间建立关系和 Service (1 -> M) 使查询 Service 变得更容易对象 User .我的想法是,这听起来像是适合您的域模型,毕竟,这听起来像是 User 之间存在真正的关系。和 Service作为Service实际上确实属于 User .权限仍然有助于控制谁有权访问 Service而那个User仍然是 Service 的所有者

[services: Service.findAllByUser(User.findByUsername(SecurityUtils.subject.principal))]

它可能不会提高效率,但它是一个更清洁的解决方案

关于grails - Shiro - 如何有效地选择用户有权访问的所有资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com