Grails - 在视图中获取对已登录用户的引用

时间:2016-12-24 00:06:58

标签: grails spring-security gsp

我正在开发一个需要将数据限制为特定用户的应用程序。我使用Spring Security Core来处理用户管理。我需要的是获取对已登录用户的引用,以便进行一些过滤操作。请考虑以下代码:

    class Cliente {
        Deposito deposito

        String ci
        String nombre
        String telefono
        String celular

        static constraints = {
        ...
        }
    }

class Empresa {
    Deposito deposito

    String tipoDeEmpresa
    String nombreDeEmpresa
    String departamento
    String provincia
    String municipio    

    static constraints = {
        ...
    }
}

class SecUser implements Serializable {

    private static final long serialVersionUID = 1

    Deposito deposito

    String nombre
    String username
    String password
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired

    ...
}

我需要帮助这个GSP片段(生成form.gsp视图)代码:

<div class="fieldcontain ${hasErrors(bean: clienteInstance, field: 'empresa', 'error')} required">
    <label for="empresa">
        <g:message code="cliente.empresa.label" default="Empresa"/>
        <span class="required-indicator">*</span>
    </label>    
    <g:select id="empresa" name="empresa.id" from="${org.socymet.proveedor.Empresa.findAllByDeposito(loggedUser.deposito,[sort: 'nombreDeEmpresa'])}" optionKey="id" required="" value="${clienteInstance?.empresa?.id}" class="many-to-one"/>
</div>

在调用Empresa.findAllByDeposito(loggedUser.deposito,[sort: 'nombreDeEmpresa']) finder的行中,我需要用有效且正确的代码替换loggedUser,以获取对当前登录用户的引用。

我试图在Cliente域类中实现一个方法,但我认为这不是一个好习惯。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用...

获取当前用户
<sec:ifLoggedIn>
   <sec:username />
</sec:ifLoggedIn>

您可以根据...等角色做出决定。

<sec:ifAnyGranted roles="ROLE_YOUR_ROLE">
    // do stuff
</sec:ifAnyGranted>

默认情况下,角色在上面进行访问时带有ROLE_前缀,这将基于名为YOUR_ROLE的角色进行限制

相关问题