我想知道如何在不保护整个控制器的情况下将CRUD与安全模块一起使用。
我有一个名为BlogPosts的控制器的BlogPost模型。由于我希望管理员能够使用CRUD后台创建,更新和删除帖子,因此控制器扩展了CRUD并使用了Secure:
@With(Secure.class)
public class BlogPosts extends CRUD {
}
但现在我想在主页上列出博客文章。我无法使用此控制器,因为它仅限于经过身份验证的用户。而且我不想创建另一个控制器。
那么最好的方法是什么?
答案 0 :(得分:2)
您可以编写自己的@Before方法,为除 list 之外的所有方法调用安全检查。类似的东西:
@Before(unless="list")
public static void before() {
// Do security check
}
它不会像注释那样方便,但它会起作用。
编辑对澄清的评论
我看到答案有点含糊不清。我们的想法是删除@With()
注释并创建您自己的本地@Before
方法,该方法将在除 list
之外的所有方法上执行。然后,该方法可以将处理委托给Secure.before(因为它是一个没有参数的静态方法)
现在我考虑一下,你可以在unless
类中为方法添加Secure
限制,它应该适用于这种情况,虽然它意味着混合一些概念(所以我不会这样做)它在我的项目中。)
答案 1 :(得分:2)
只需通过另一个控制器中的JPA获取BlogPost
项:
public static void listBlogs() {
render(BlogPost.findAll());
}