我已经实现了一个服务,用户可以上传文件(这里称为服务)来分析它们。每个注册用户只能访问他上传的文件。
因此,在上传文件后,我授予用户该文件的通配符权限:
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)]
虽然这有效,但它似乎非常低效。有什么更好的方法来实现这一点?也许在用户和文件之间建立关系?