gpt4 book ai didi

java - Spring 安全 : Allow admin to do everything

转载 作者:搜寻专家 更新时间:2023-11-01 02:47:21 25 4
gpt4 key购买 nike

我如何允许管理员(角色为 ROLE_ADMIN 的用户)访问所有内容而不用在每个表达式中明确提及他?目前我有我的 Controller 的方法注释为

@PreAuthorize("(hasRole('ROLE_VENDOR') and hasPermission(#product, 'admin')) or hasRole('ROLE_ADMIN')")

但我想让它像这样简单,同时允许管理员做任何事情:

@PreAuthorize("hasRole('ROLE_VENDOR') and hasPermission(#product, 'admin')")

这可能吗?我怎么做?重要的是要注意 hasPermission(#product, ...) 对于管理员被评估为 false。

最佳答案

使用分层角色。

这是一个典型的配置:

<bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
<constructor-arg ref="roleHierarchy" />
</bean>
<bean id="roleHierarchy"
class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
<property name="hierarchy">
<value>
ROLE_ADMIN > ROLE_STAFF
ROLE_STAFF > ROLE_USER
ROLE_USER > ROLE_GUEST
</value>
</property>
</bean>

reference

编辑

您可能还需要编写自定义 PermissionEvaluator .如果您还没有:只需扩展 AclPermissionEvaluator并仅覆盖 hasPermission 以在用户具有 admin 角色时立即返回 true;否则返回 super.hasPermission(...)

像这样配置你的bean:

<security:global-method-security pre-post-annotations="enabled">
<security:expression-handler ref="expressionHandler" />
</security:global-method-security>

<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<property name="permissionEvaluator" ref="customPermissionEvaluator" />
...
</bean>

关于java - Spring 安全 : Allow admin to do everything,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124657/

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