如何在Grails中显示登录到选择框中的用户的角色
我有一个具有多个角色的用户,我想在标题的下拉列表中显示他的可用角色。一种方法是编写我自己的自定义标记,但是还有其他简单的方法吗。您可以使用如何在Grails中显示登录到选择框中的用户的角色,grails,Grails,我有一个具有多个角色的用户,我想在标题的下拉列表中显示他的可用角色。一种方法是编写我自己的自定义标记,但是还有其他简单的方法吗。您可以使用标记,使用from=“${yourPrincipal.roles}并设置要显示的属性。更多信息请参见官方文档:您可以创建: class RolesTagLib{ 静态命名空间='my' def springSecurityService def currentUserRoleSelect={attrs-> def user=springSecurityServ
标记,使用from=“${yourPrincipal.roles}
并设置要显示的属性。更多信息请参见官方文档:您可以创建:
class RolesTagLib{
静态命名空间='my'
def springSecurityService
def currentUserRoleSelect={attrs->
def user=springSecurityService.getCurrentUser()
def roles=UserRole.findallbyser(user).collect{it.role}作为集合
attrs.from=角色
attrs.optionKey=attrs.optionKey?:“id”
attrs.optionValue=attrs.optionValue?:“权限”
我是这样做的。在什么地方,有这种方法
def getRoleMap(userInstance) {
List roles = Role.list()
roles.sort { r1, r2 ->
r1.authority <=> r2.authority
}
Set userRoleNames = []
if (userInstance.id) {
for (role in userInstance.authorities) {
userRoleNames << role.authority
}
}
LinkedHashMap<Role, Boolean> roleMap = [:]
for (role in roles) {
roleMap[(role)] = userRoleNames.contains(role.authority)
}
return roleMap
}
如何从中获取主体?您是否使用Spring Security来处理用户?我的问题是GSP,它在控制器中很容易,但我想在视图中显示角色列表。是的,我使用Spring Security,我想在选择框中显示,以便我可以在角色之间切换。您不应该在视图中获取主体。您最好使用passi将角色从控制器转移到视图。因此,如果您知道如何在控制器中获取角色,只需将其传递到模型中的render
方法。然后,在视图中,将角色列表放在“from”标记属性中。是否使用Spring Security Core?
<my:currentUserRoleSelect name="role"/>
def getRoleMap(userInstance) {
List roles = Role.list()
roles.sort { r1, r2 ->
r1.authority <=> r2.authority
}
Set userRoleNames = []
if (userInstance.id) {
for (role in userInstance.authorities) {
userRoleNames << role.authority
}
}
LinkedHashMap<Role, Boolean> roleMap = [:]
for (role in roles) {
roleMap[(role)] = userRoleNames.contains(role.authority)
}
return roleMap
}
<div class='role-map' style="width: 300px; height: 200px; overflow:auto;border: 1px solid black">
<g:each in="${roleMap}">
<div>
<g:checkBox name="userRoles" value="${it.key.authority}" checked="${it.value}"/>
${it.key.authority.encodeAsHTML()}
</div>
</g:each>
</div>
UserRole.removeAll(user)
params.userRoles.roleAuthorities.each { roleAuthority ->
UserRole.create(user, Role.findByAuthority(roleAuthority))
}