Spring MVC角色和权限到管理员

6

我是spring mvc的新手,在我的现有项目中,有一个管理员拥有更新数据的权限,但现在我需要创建两个新的管理员,admin1和admin2,他们登录时只能看到有限的页面,例如:

当管理员登录时,他们可以在菜单栏中看到添加数据、更新数据、发布消息页面。而对于Admin1来说,他只能在菜单栏中看到发布消息页面。

请指导我如何在spring mvc中实现这个任务。 提前感谢您。

4个回答

2
您需要考虑使用Spring Security来实现此目的。请查看以下内容。
<http auto-config="true">
 <intercept-url pattern="/admin*" access="ROLE_ADMIN" />
</http>

这意味着只有具备“ROLE_ADMIN”权限的用户才能访问URI /admin*。如果未经授权的用户尝试访问它,将显示“http 403 access denied page”。

您需要配置URL和允许访问它们的权限。

简单的示例请参见http://www.mkyong.com/spring-security/spring-security-access-control-example/


1
我有一个类似的用例,管理员可能想创建新角色,并为这些角色任意分配权限。
如果我要根据用户被授予的权限中是否存在“ ROLE_ *”来授权,则每当有人添加新角色或该角色的业务需求发生变化时,代码都需要更改。
像@Ralph一样,我创建了一个库,以基于“角色到权限”的映射注入映射权限,因为我发现分层角色实现不足...
当在当前安全会话中注入身份验证对象时,它将具有原始角色/授予的权限。您可以在UserDetailsService或JWT Authentication Converter中提供映射权限。
PermissionProvider被调用以获取用户是成员的每个角色的有效权限。不同的权限列表作为GrantedAuthority项添加到Authentication对象中。
然后我可以在配置中使用权限级别授权,角色到权限映射可以在运行时更改。
概念 -
ADMIN1 -> PERM_ADD, PERM_POST
ADMIN2 -> PERM_POST, PERM_UPDATE

实现示例 -
@Autowired 
RolePermissionsRepository repository;

public void setup1(){
  String roleName = "ROLE_ADMIN1";
  List<String> permissions = new ArrayList<String>();
  permissions.add("PERM_ADD");
  permissions.add("PERM_POST");
  repository.save(new RolePermissions(roleName, permissions));
} 

public void setup2(){
  String roleName = "ROLE_ADMIN2";
  List<String> permissions = new ArrayList<String>();
  permissions.add("PERM_UPDATE");
  permissions.add("PERM_POST");
  repository.save(new RolePermissions(roleName, permissions));
}

然后使用访问权限而不是角色。

<http auto-config="true">
     <intercept-url pattern="/addData" access="PERM_ADD" />
     <intercept-url pattern="/updateData" access="PERM_UPDATE" />
     <intercept-url pattern="/postMessage" access="PERM_POST" />
</http>

使用授权注释 -
@PreAuthorize("hasAuthority('PERM_ADD')")
@RequestMapping("/add")
public String add() {
  ...
}

源代码请见此处 - https://github.com/savantly-net/spring-role-permissions


0

您需要在Spring安全中创建两个具有不同访问权限的角色。

<http auto-config="true">
     <intercept-url pattern="/addData" access="ADMIN_2" />
     <intercept-url pattern="/updateData" access="ADMIN_2" />
     <intercept-url pattern="/postMessage" access="ADMIN_1" />
</http>

0

你当然需要两个角色。- 然后你可以选择 - 检查角色Admin1或Admin2或在任何地方检查Admin1。 - 但更好的方法已经被你提到:分离角色和权限:将角色分配给用户,将权限分配给角色,这样用户通过其角色获得其权限。现在你只需要检查权限以允许访问一个函数。

Spring已经有了内置的14.4层次角色概念,但我觉得它很笨拙,因为它要求每个投票者都需要理解它。所以我实现了我的自己的解决方案,它非常简单,只基于Spring-Security-Roles。所以你只需要改变角色提供者,而不需要做其他的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接