【问题标题】:Redirecting to different action upon failed restriction in deadbolt2重定向到对 deadbolt 2 中失败限制的不同操作
【发布时间】:2014-06-11 19:25:53
【问题描述】:

使用 deadbolt2 和 play-authenticate,我可以根据用户的角色和权限定义对控制器和操作级别的限制。如果当前用户不满足这些限制,则调用配置的 deadbolt 处理程序中的AbstractDeadboltHandler.onAuthFailure

现在,我想要实现的是拥有不同的用户角色(例如,trial_user、basic_user、pro_user、admin,...)并只允许某些用户调用特定操作(换句话说:阻止其他用户调用操作。例如,不应允许 trial_user 创建新帖子)。

到目前为止,这有效,因为没有所需角色的用户无法调用该操作。但是,问题是:一旦不满足限制,用户就会被重定向到要求他登录的通用“身份验证失败”页面。在我看来,这不是正确,因为用户实际已登录并且仅缺少某个角色(或具有不能执行该操作的角色)。

在这种情况下,我如何在onAuthFailure 方法中做出反应?如何区分“用户未登录”和“用户没有特定角色”。显然,总是要求用户登录不是正确的做法。我希望收到“您无权访问该页面”的通知。

我如何知道身份验证失败背后的具体原因?使用 deadbolt2 甚至可能吗?

【问题讨论】:

    标签: permissions playframework-2.2 play-authenticate deadbolt deadbolt-2


    【解决方案1】:

    您可以尝试以这种方式实现您的 DeadboltHandler#onAuthFailure 方法

    public F.Promise<Result> onAuthFailure(Http.Context context,
                                           String content) {
        Subject subject = getSubject();
        if (subject == null) {
            // 401 Unauthorized
        } else {
            // 403 Forbidden
        }
    }
    

    【讨论】:

    • 感谢您的回答。有没有办法可以找出缺少哪个角色? IE。根据缺少的角色显示/重定向不同的错误消息? (“您必须是管理员”、“请升级您的帐户”)。
    • 目前没有,但这是个好主意。当我有时间时,我会在请求范围中添加一个报告对象,详细说明授权失败的原因。
    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多