我使用Spring Security核心插件设置了一个新项目。我的目标是简单的登录/注销,用户管理(CRUD),包括角色(管理员,用户)。只是管理员应该能够创建用户,因此不需要注册。
我遵循了本教程(文档):
现在我有一个User,Role和UserRole Domain类以及CRUD功能。遗憾的是,缺少角色管理。在最好的情况下,角色应由管理员在“创建用户进程”中指定。
我注意到的另一件事是我无法向生成的用户类添加任何其他字段。只是添加“String lastName”会导致以下错误(run-app):
2015-04-22 19:50:57,749 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener - Error initializing the application: No signature of method: test.UserRole.exists() is applicable for argument types: (null, java.lang.Long) values: [null, 1]
Possible solutions: exists(long, long), exists(java.io.Serializable), list(), first(), wait(), last()
Message: No signature of method: test.UserRole.exists() is applicable for argument types: (null, java.lang.Long) values: [null, 1]
Possible solutions: exists(long, long), exists(java.io.Serializable), list(), first(), wait(), last()
是否有“简单”的方法来实施角色管理并修复此错误?
我应该切换到Spring Security ui插件吗?看来这个插件实现了很多我不需要的功能。
编辑:我在User类中添加了一个字段“role”,用于在用户创建期间指定角色。现在我应该在UserRole实体中设置User和Role之间的连接。我在UserController.create方法中添加了以下行:
def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
def user = new User(params)
user.save(flush: true)
UserRole.create user, adminRole, true
respond user
但我猜它在错误的地方,因为我无法使用已创建的用户访问受保护的URL