0

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

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

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

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

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

4

1 回答 1

1

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

public F.Promise<Result> onAuthFailure(Http.Context context,
                                       String content) {
    Subject subject = getSubject();
    if (subject == null) {
        // 401 Unauthorized
    } else {
        // 403 Forbidden
    }
}
于 2014-06-12T09:51:28.170 回答