gpt4 book ai didi

grails - 如何在 Grails 中使用 Spring Security 进行基于规则的授权?

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

Spring Security 对于基于角色的授权非常有用,但在基于规则的授权方面它似乎有些不足。当然,有很多方法可以通过 SpEL 来做到这一点,但是走这条路似乎会将您的授权逻辑锁定在注释中,而将逻辑拉出到服务中以便多个地方可以使用相同的逻辑会更好。

似乎有一些 ways to go about添加你自己的 SpEL 表达式,但注意到特别清晰,甚至那些对我来说有意义的似乎也不够。我认为,考虑到 Groovy 的灵 active ,必须有某种方法不必将依赖项硬编码在一起,而是拥有安全规则(或 SpEL)扩展)在运行时拾取。

虽然并不理想,但即使是像定义所有所需的新规则并注入(inject) as mixin(即 SecurityExpressionRoot.mixin MyRule1)这样看似简单的事情也会是一个好的开始,但这并不'似乎有效。

有人知道这样做的例子吗?如果没有,我自己该怎么做?

<小时/>

一个(简化的)示例:如果 4 个字段中的 3 个字段的值超过特定阈值,则用户只能对对象执行特定操作(即执行服务方法),但前提是该对象少于 3 天旧:

class MyRule {

boolean canTakeAction(Person person, MyThing myThing) {
int numFieldsWithValues = 0
if (myThing.field1 != null) { numFieldsWithValues++ }
if (myThing.field2 != null) { numFieldsWithValues++ }
if (myThing.field3 != null) { numFieldsWithValues++ }
if (myThing.field4 != null) { numFieldsWithValues++ }

return (numFieldsWithValues > 3) && (ageInDays(myThing) < 3)
}

int ageInDays(MyThing myThing) {
...
}
}

这是更简单的规则之一。

最佳答案

基于角色的授权是最简单但灵 active 较差的方法。与此形成对比的是 Spring security ACL system 。 ACL 允许您定义精确的可以在运行时对哪个对象执行什么操作。另一方面,这需要更复杂的设置。还有一个grails plugin for this .

将注释与 SpEL 表达式一起使用的方式介于这两种选择之间。它们比简单角色更灵活,并且比 ACL 更容易。如果您正在寻找 Grails 中方法安全性的介绍,也许 this我前段时间写的博文可以帮助你。

关于grails - 如何在 Grails 中使用 Spring Security 进行基于规则的授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942614/

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