在Play Framework中同时使用CRUD和Secure模块

时间:2012-03-06 11:17:57

标签: java model-view-controller playframework

我想知道如何在不保护整个控制器的情况下将CRUD与安全模块一起使用。

我有一个名为BlogPosts的控制器的BlogPost模型。由于我希望管理员能够使用CRUD后台创建,更新和删除帖子,因此控制器扩展了CRUD并使用了Secure:

@With(Secure.class)
public class BlogPosts extends CRUD {

}

但现在我想在主页上列出博客文章。我无法使用此控制器,因为它仅限于经过身份验证的用户。而且我不想创建另一个控制器。

那么最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以编写自己的@Before方法,为除 list 之外的所有方法调用安全检查。类似的东西:

   @Before(unless="list")
   public static void before() {
      // Do security check
   }

它不会像注释那样方便,但它会起作用。

请参阅documentation

编辑对澄清的评论

我看到答案有点含糊不清。我们的想法是删除@With()注释并创建您自己的本地@Before方法,该方法将在除 list之外的所有方法上执行。然后,该方法可以将处理委托给Secure.before(因为它是一个没有参数的静态方法)

现在我考虑一下,你可以在unless类中为方法添加Secure限制,它应该适用于这种情况,虽然它意味着混合一些概念(所以我不会这样做)它在我的项目中。)

答案 1 :(得分:2)

只需通过另一个控制器中的JPA获取BlogPost项:

public static void listBlogs() {
    render(BlogPost.findAll());
}