我是ss3的新手,我已经阅读了它的参考资料,我也阅读了春季安全手册。
但是我没有找到关于角色许可的任何内容。
例如,这是基于表单的身份验证的配置。
<http auto-config='true'>
<intercept-url pattern="/user/add/**" access="hasRole('USER_ADMIN')"/>
<intercept-url pattern="/user/delete/**" access="hasRole('USER_ADMIN')"/>
<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="ROLE_USER" />
<form-login login-page='/login.jsp'/>
</http>
我想控制用户操作(添加/删除):
<intercept-url pattern="/user/add/**" access="hasRole('USER_ADMIN')"/>
<intercept-url pattern="/user/delete/**" access="hasRole('USER_ADMIN')"/>
我定义了'USER_ADMIN'的角色,但这还不够,因为我想区别对拥有'删除'权限的用户具有'添加'权限的用户。
也许我可以添加更多角色,例如'user_admin_add'和'user_admin_delete'。
但我认为这不是一个好主意,因为'添加'或'删除'是权限,而不是角色。
如何制作?
此外,似乎所有角色都应该被混淆到xml文件,我想知道我是否可以动态添加新的角色和权限(在管理员页面中)?
答案 0 :(得分:3)
将角色视为特权。并根据需要将它们制粒。另一件事是,也许你应该进行更多的RESTFul实现。但这是另一个主题。
例如,您的“删除”可能是“DELETE”HTTP方法。那么你可能是:
<security:intercept-url pattern="/users/*" method="DELETE" access="ROLE_DELETE_USER" />
和curl -X DELETE -u login:password 'http://example.com/users/1'
会删除ID为user
的{{1}}。
通过RESTFul,由于uris是标识符或动作,因此在添加角色(特权)方面没有任何用处。由于这些角色旨在用于应该包含xml文件的新资源。
我担心你不能这样做,除非你使用1
通配符。在我看来,如果不小心使用会导致麻烦。
答案 1 :(得分:3)
也许我可以添加更多角色,例如'user_admin_add'和'user_admin_delete'。
这就是方法。权限是角色,通常有人将他们之间的区别视为不需要。
我认为角色 ROLE_USER_ADDER 或权限 PERMISSION_ADD_USERS 没有太大区别。
但是,如果需要,您可以使用角色作为概念来对权限进行分组。例如,您可以拥有一个可以添加和删除用户的角色管理员。因此, ROLE_ADMIN 角色将具有 PERMISSION_ADD_USER 和 PERMISSION_REMOVE_USER 。 Spring仍然只是作为权限来查看角色和权限。
对于添加动态角色,您可以通过从数据库加载当前用户权限来实现。看一下Spring UserDetailsService
的安全性。它返回的UserDetails
对象有一个getAuthorities()
方法,您可以从数据库中填充该方法。
/**
* Returns the authorities granted to the user. Cannot return <code>null</code>.
*
* @return the authorities, sorted by natural key (never <code>null</code>)
*/
Collection<GrantedAuthority> getAuthorities();
Here是实施您自己的UserDetailsService
。
答案 2 :(得分:2)
在我个人看来,春季安全有几个(比方说)不幸的选择名称。因此,如果您将其用于特权,请不要过多关注术语“角色”,它可以完美地运作。
在我的应用程序中,使用命名约定在Roles ans Privileges之间进行选择。 (角色写成大写,特权小写)。但要注意角色选民只会注意以“ROLE”开头的字符串(默认配置,可以更改。)
答案 3 :(得分:0)
你应该更多地考虑角色,而不是角色,而不是权限。如果要区分添加和删除用户,可以定义描述为ROLE_SALES和ROLE_USER_ADMIN的角色。销售人员可能需要能够将新用户添加到系统中。
关于角色的动态应用,您应该看一下Spring Security的体系结构。您最有可能想要使用或实施合适的UserDetailsService
。请参阅UserDetailsService reference documentation。
例如,如果要将用户授权信息存储在JDBC数据库中,则可能需要使用JdbcDaoImpl。
在namespace introduction中有一些使用不同身份验证提供程序的示例。