用户问题中的声明性授权

Posted

技术标签:

【中文标题】用户问题中的声明性授权【英文标题】:declerative_authorization on User problem 【发布时间】:2011-02-06 14:23:44 【问题描述】:

我正在尝试使用 declerative_authorization 在我的用户控制器中阻止除创建和更新之外的所有默认方法。但是当时我将 filter_resource_access 或 filter_access_to 添加到我的 usersController 中,我总是得到“找不到没有 ID 的用户”。有人愿意解释为什么会发生这种情况吗?

类用户控制器 定义新 @user = User.new 结束

定义创建 @user = User.new(params[:user]) 如果@user.save flash[:notice] = "帐号已注册!" 重定向到 account_url 别的 渲染 :action => :new 结尾 结束

默认显示 @user = @current_user 结束

定义编辑 @user = @current_user 结束

定义更新 @user = @current_user # 让我们的观点“更干净”和更一致 如果@user.update_attributes(params[:user]) flash[:notice] = "帐户更新!" 重定向到 account_url 别的 渲染 :action => :edit 结尾 结尾 结尾

【问题讨论】:

【参考方案1】:

您应该在使用before_filter 调用filter_access_to 之前设置@user 变量,因为当您调用filter_access_to 时,declarative_authorization 会尝试访问@user

before_filter :set_user
filter_access_to :all

...

protected

def set_user
  @user = @current_user
end

也许您在filter_access_to 调用中将attribute_check 参数设置为true?我有一个类似的控制器,我真的不需要before_filter

另一个可能导致它的原因是您的User 模型中的using_access_control 调用。

【讨论】:

以上是关于用户问题中的声明性授权的主要内容,如果未能解决你的问题,请参考以下文章

IdentityServer4 客户端范围和基于用户声明的授权

Java EE 声明性安全性,无法为 JDBC 领域用户加载组

如何使用 Web Api Asp.Net Core 实现基于声明的授权?

无法访问 WebApi 授权令牌中的 JWT 声明

基于声明的授权

由于内部错误,AWS Cognito 授权方错误 500 执行失败 - JWT 声明中的值为空