Spring MVC角色和管理员权限

时间:2015-06-28 06:32:32

标签: java spring spring-mvc web-applications user-roles

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

当管理员登录时,他们可以在菜单栏中看到添加数据,更新数据,发布消息页面。 但是在Admin1的情况下,只能在菜单栏中看到Post meassage页面。

所以,请指导我如何在spring mvc中完成这项任务 在此先感谢。

4 个答案:

答案 0 :(得分:2)

您必须考虑使用Spring安全性来实现此目的。检查以下内容

<http auto-config="true">
 <intercept-url pattern="/admin*" access="ROLE_ADMIN" />
</http>

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

您必须配置网址和允许访问的网址

http://www.mkyong.com/spring-security/spring-security-access-control-example/

的简单示例

答案 1 :(得分:0)

你当然需要两个角色。 - 然后你可以 - 检查每个地方的角色Admin1 or Admin2Admin1。 - 但是您已经提到了一种更好的方法:单独的角色和权限:为用户分配角色和角色权限,以便用户通过他的角色获得其权限。现在您只需检查特权以允许访问函数。

Spring已经在14.4 Hierarchical Roles concept构建,但我觉得它很笨拙,因为它需要每个选民都需要理解它。所以我实现了my own solution,这非常简单,仅基于Spring-Security-Roles。因此,只需要更改角色提供程序,但仅此而已。

答案 2 :(得分: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>

答案 3 :(得分:0)

我有一个类似的用例,管理员可能想要创建新角色,并为这些角色任意分配权限。

如果我要授予用户授予的权限中存在ROLE_*的权限,那么每次有人添加新角色或该角色的业务需求发生变化时,都需要更改代码。

就像@Ralph一样,我创建了一个库来基于Role to Permissions注入映射的授权,因为我发现缺少层次角色实现...

在当前安全会话中注入Authentication对象时,它将具有原始角色/授予的权限。 您可以在UserDetailsS​​ervice或JWT Authentication Converter中提供映射权限。

调用PermissionProvider以获得用户所属的每个角色的有效权限。权限的不同列表添加为Authentication对象中的GrantedAuthority项目。

然后,我可以在配置中使用权限级别授权,并且权限映射的角色可以在运行时更改。

概念-

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