在Grails中创建一个被阻止的用户拦截器

时间:2010-04-09 10:39:17

标签: grails

我正在使用社交网站,用户可以阻止其他用户。在整个站点 - 几十个地方,显示用户信息。例如,用户评论,回复表格,在线用户列表等等。问题在于,如果显示用户信息的大量位置,则每次检查该用户是否被阻止变得非常困难。例如:

<g:each var="comment" in="${comments}">
  <g:if test="!${loggedInUser.blockedUsers.find { it == comment.user}">
     show comment
  </g:if>
</g:each>

Grails是否提供任何有助于创建某种过滤器或拦截器的功能,我可以在迭代列表时简单地排除被阻止的用户等?如果没有,你会建议我做什么?

3 个答案:

答案 0 :(得分:1)

一个好的经验法则是只加载您需要的内容,因此您的服务方法应该在数据库级别过滤掉被阻止的用户。然后你的控制器会更简单,视图只需显示它们的内容。

但如果您更喜欢拦截器,请看一下:

http://www.grails.org/Controllers+-+Interceptors

答案 1 :(得分:0)

可能会这样做:

<g:each var="comment" in="${comments.findAll { !(it in loggedInUsers.blockedUsers) }}">
    show comment
</g:each>

但我认为在控制器中过滤你的评论会更有效率。你可能会对你的评论做一个Grails Criteria。

答案 2 :(得分:0)

也许Hibernate Filter插件可以帮到你?