5

我在我的jsp页面上应用spring security,我需要向具有不同角色的用户显示页面的不同部分,所有角色如下。

所有经过身份验证的用户 >> 编辑和添加新用户

管理员 > 删除和编辑并添加新的

匿名 > 添加新

<sec:authorize
        access="isAuthenticated()">
          Code of add new and edit buttons
 </sec:authorize>

 <sec:authorize 
         access="hasAnyRole('ADMIN')">
   Code to add new, edit and delete buttons
 </sec:authorize>

  <sec:authorize 
         access="isAnonymous()">
     Code to add new
  </sec:authorize>

我想知道是否有任何更简单的方法,在这种情况下,如果我想修改特定角色的访问权限,我必须在 security.xml 文件和我设置角色访问权限的每个页面中更改其访问规则。

例如,假设我想让管理员角色无法访问删除按钮,那么我必须更改 security.xml 的代码以及所有通过管理员角色身份验证的 JSP 页面才能查看删除按钮。

有没有更简单的方法呢!?

4

4 回答 4

2

我认为没有内置的解决方案。您可以设置一个细粒度的角色系统分配,如编辑角色、删除角色等。然后您可以更自由地分配这些角色。如果您想让用户轻松使用(例如仍然只显示管理员和用户角色),您可能必须在角色和显示给用户的标题之间的映射背后隐藏实际角色。

另一种方法是为每个操作(编辑、删除等)设置全局参数,您可以在其中指定该操作应允许的角色。这样您就不会将角色硬编码到您的应用程序中,而是通过全局参数映射它们。

期待看看其他人是否提出了更好的主意。

编辑以指定通过全局参数进行映射的方法 (改进后的映射将存储在数据库中,但这是从临时解决方案中获得实现 ACL):

对于全局参数,我的意思是类似rightsMapping.properties. 在此文件中,您将映射类似的内容:

right.edit=ROLE_USER, ROLE_ADMIN
right.edit=ROLE_ADMIN
etc...

之后,您可以使用以下方式将权限插入 jsf 页面:

<f:loadBundle basename="rightsMapping" var="rights"/>
....
<f:CommandButton name="edit" .... rendered="hasRole(rights.edit)"/>

这是一个非常简单的动手解决方案,可以通过使用例如数据库中的映射表、评估访问权限的 Bean 等进行改进。但是将细粒度权限映射到角色的基本思想保持不变。

于 2013-05-24T07:58:02.453 回答
2

可以通过使用可以包含在角色对象中作为集合的权限集来解决。

在此实施之后,您可以检查显示按钮的正确权限,如果您想更改安全架构中的任何内容,您可以通过授予或撤销相关角色的权限来轻松管理。

这方面的一个例子可以在下面的链接中看到。

http://en.tekstenuitleg.net/blog/spring-security-with-roles-and-rights

于 2013-05-24T08:12:39.590 回答
1

我想您在应用程序中的任何地方都拥有相同的“编辑”按钮权限。在这种情况下,您可以将自动化代码提取到一些自定义标记中(我推荐JSP 标记文件)。对于每个编辑按钮,您将使用您的自定义标签:

<customtags:hasEditPermission>
     Edit button code goes here
<customtags:hasEditPermission>

所有权限都将在您的 : 中声明一次hasEditPermission.tag

<%@tag description="Edit permission tag" pageEncoding="UTF-8"%>
<sec:authorize  access="hasAnyRole('ADMIN')">
    <jsp:doBody/>
</sec:authorize>

因此,对于新的 POWER_USER 角色,您只需修改一个文件:

<%@tag description="Edit permission tag" pageEncoding="UTF-8"%>
<sec:authorize  access="hasAnyRole('ADMIN', 'POWER_USER')">
    <jsp:doBody/>
</sec:authorize>

您也可以为“添加新”和“删除”按钮准备和使用标签。希望这可以帮助。

于 2013-05-24T09:48:13.410 回答
0

这可能是您正在寻找的,带有示例代码

在您的情况下,您将拥有 BF_ADD_XXX、BF_EDIT_XXX 和 BF_DELETE_XXX 等。

这允许您向/从特定角色授予/撤销特定权限(或 BF 或业务功能或您想要调用的任何内容)。

于 2013-06-03T19:11:34.177 回答