2012-06-25 29 views
0

在我的系统中,我为用户分配了许多角色(让我们假设3现在为ROLE_ADMIN, ROLE_USER, ROLE_SERVICES)。在我的一个控制器中(让我们假设SearchController我们有三个动作serviceIndex{}, userIndex{} and adminIndex{}),我希望任何角色的用户都能够访问两个操作(前两个)。对于最终操作,我想限制对单个角色类型的用户(可以说是ROLE_USER)的操作,但允许访问其他角色的用户(即到ROLE_ADMIN, ROLE_SERVICE。我的请求映射表中有类似如下的内容:在spring安全核心中为grails配置requestmap时出错

config_attribute ------------------------------------------------ -----------> url
ROLE_ADMIN,ROLE_SERVICE,ROLE_USER ------------------------------ >/search/serviceIndex
ROLE_ADMIN,ROLE_SERVICE,ROLE_USER ------------------------------->/search/userIndex
ROLE_ADMIN,ROLE_SERVICE ----------------------------------------->/search/adminIndex

由于第三条规则指出URL'/ search/adminIndex'对ROLE_USER不可访问,因此具有该角色的用户应该已被拒绝访问该URL的授权。但是,用户仍然可以访问该网址。什么是正确的配置。我确实尝试了一些像/search/adminIndex/**,但那也行不通。在附注中,没有一个网址会有后缀,但是如果用户操纵网址就像加入后缀/search/userIndex/56a以防万一,我仍然希望阻止访问。

问候, dipess

回答

1

由于通过规则的插件进行迭代,并应用于当前URL匹配的第一个,我会先设定adminIndex再有别的一个包罗万象。

ROLE_ADMIN,ROLE_SERVICE   /search/adminIndex 
ROLE_ADMIN,ROLE_SERVICE,ROLE_USER /search/** 
+0

即使您可能是对的,但由于每个URL都不相同,因此这种逻辑看起来有缺陷。我真的不明白为什么OP的当前配置不能工作。 – Gregg

+0

其中一个原因可能是其他未粘贴的规则在粘贴任何粘贴前匹配。在那种情况下,我的答案也是错误的。 –