在Grails with Spring Security中选择要基于用户显示的内容

时间:2013-12-01 22:27:45

标签: grails spring-security

我有一个Grails应用,其中包含PeopleLocationPicturesUsers的域名。已生成控制器和视图。我有我的索引页sec:tagged,以便管理员可以看到控制器上传文件,创建数据和用户。

用户拥有用户名,密码和位置。当用户登录时,我希望他们查看与其位置相关的文件。可以有多个用户连接到某个位置。但我希望每个具有该位置的用户都能看到相关文件。我盯着@Secure,但转移到sec:标签。现在我只需要根据位置限制文件的显示。有什么建议?

这是我到目前为止用户显示的代码

<sec:access expression="hasRole('ROLE_USER')">

<% def user = springSecurityService.getCurrentlyLoggedInUser()
def aPerson = user.person
def locations = Location.findAllByPerson(aPerson)
locations.each ${it.picture}    %>

<g:select name="picture" from="${aPerson.all()}"/>
</sec:access>

这在“用户”页面上不显示任何内容。

1 个答案:

答案 0 :(得分:3)

首先,不惜一切代价避免<% %>。其次,我不知道你认为这段代码应该做什么:

<g:select name="picture" from="${aPerson.all()}"/>

最后,看看您的域代码有助于了解所有域代码之间的实际关系。但是继续前进你提供的东西,我会这样做:

控制器

def someAction() {
    def user = springSecurityService.getCurrentlyLoggedInUser()
    def aPerson = user.person
    def locations = Location.findAllByPerson(aPerson)
    [aPerson: aPerson, locations: locations]
}

查看

<!-- only use the expression tag if you actually need an expression -->
<sec:ifAllGranted roles='ROLE_USER'>
  <g:each in="${locations}" var="location">
     <!-- do something with each location -->
  </g:each>

  <g:select name="picture" from="${aPerson.all()}"/>
</sec:ifAllGranted>