为什么使用GRAILS的ACEGI插件注册新用户会产生“未找到默认角色”。错误

时间:2010-01-12 14:54:09

标签: grails spring-security security-roles

或许采用不同的方式,如何使用ACEGI插件为Grails中的新注册用户设置默认安全角色?

我已经关注了acegi / grails教程here并且正在使用控制器注释 - 尽管我还没有保护任何东西。

我添加了第二个名为WEB_USER的角色,并成功将用户添加到该角色。

但是,当我使用另一个新用户的注册控制器时,我收到来自Grails的错误消息"Default role not found"

通过在相应的create方法中处理null角色列表,或者甚至从注册视图中将默认角色名称作为隐藏字段发布,我可以看到我可以通过大致编写代码的方式,但他们感觉不合适-Grails。

我认为我应该能够在用户域类本身或者在用户和角色表之间的数据库关系中以某种方式定义它。

定义默认角色的目的是什么,以及为什么我收到此消息。

哦,你怎么发音acegi?

2 个答案:

答案 0 :(得分:2)

这是一个文档问题。注册页面不允许您选择角色,因为它预计它将是一个公共注册页面。创建用户时至少需要一个角色,因此需要为此工作流配置“默认”角色。

您可以使用'defaultRole'属性在SecurityConfig.groovy中设置默认角色。默认情况下它是'ROLE_USER'但它可以是你想要的任何东西。在用户注册之前,必须有一个具有此值的Authority实例。

发音在常见问题解答中 - http://www.acegisecurity.org/faq.html

答案 1 :(得分:0)

我找到了答案。通常是Grails,有一个名为ROLE_USER的默认角色。当您注册新用户时,它会查找具有该名称的角色,如果找到了该角色,则会将其分配给用户。

消息“未找到默认角色”在如何阅读方面不明确。

我首先认为这意味着“您需要在某处定义默认角色,以便为其注册新注册的用户”。

但是我认为这实际上意味着“您需要在角色表中创建一个名为ROLE_USER的数据库行,以便正常配置工作”。

让我感到震惊的是,安全功能的grails生成的一部分应该只是以某种方式将ROLE_ADMIN和ROLE_USER添加到数据库引导程序中并完成了错误的可能性。