我有一个Grails应用,其中包含People
,Location
,Pictures
和Users
的域名。已生成控制器和视图。我有我的索引页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>
这在“用户”页面上不显示任何内容。
答案 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>