我知道我可以使用注释或请求映射来限制某些特定ROLES对ACTION的访问。但现在我有不同的情况。
我的方案是:我网站的每个用户都可以创建帖子,他们可以自己发布公开,私有或仅与其他用户分享。我通过数据库表PERMISSION实现共享帖子,该表指定用户是否有权查看帖子。
此处出现的问题是,当客户通过直接链接访问帖子时,如何确定他/她是否有权查看该帖子?有三种情况:
- 这个帖子是公开的,所以任何人都可以查看(包括不登录 用户)
- 该帖子是私有的,因此只有登录所有者才能查看
- 帖子是共享,只表示共享的登录用户和 所有者可以查看它。
醇>
我想这样处理:
- 如果要求的帖子是公开的:好的。
- 如果请求的帖子是私人/共享:我想重定向 客户到登录页面;后 登录后,用户将重新定向 到他想看的页面。
醇>
这里的问题是我可以将用户重定向到登录控制器/ auth操作,但之后我不知道如何重定向它。每个帖子的链接因post_id而异,因此我无法使用SpringSecurityUtils.securityConfig.successHandler.defaultTargetUrl
有人知道这样做的方法吗?
答案 0 :(得分:1)
关于grails的Dunno,但spring security有一个spring-security-redirect
参数,可用于在成功验证时将用户重定向到指定的URL。
答案 1 :(得分:1)
我认为您可以添加自己的过滤器,该过滤器将在调用操作之前执行,并在那里验证帖子权限。您可以找到有关Grails Filters here的更多信息。
答案 2 :(得分:1)
你看过Grails Spring Security ACL插件吗?我不太了解它,但它旨在限制对特定实例的访问:
答案 3 :(得分:0)
我找到了解决此问题的快速解决方法:
如果用户未登录:在查看操作时,请按以下方式设置post_id:
session.post_id = 8
将用户重定向到Login Controller / Auth操作。
grails.plugins.springsecurity.successHandler.defaultTargetUrl
)时,如果session.post_id存在,请使用它来构建重定向到视图操作的链接。在重定向之前,请清除session.post_id。