ruby-on-rails - 使用 active_model_serializers 序列化权限(例如 CanCan)

标签 ruby-on-rails cancan activemodel active-model-serializers

如何使用 active_model_serializers 序列化权限?我无权访问 current_usercan?模型和序列化器中的方法。

最佳答案

首先,访问 current_user在序列化程序上下文中,使用新的范围功能:

class ApplicationController < ActionController::Base
  ...
  serialization_scope :current_user
end

如果您手动实例化序列化程序,请确保传递范围:
model.active_model_serializer.new(model, scope: serialization_scope)

然后在序列化程序中,使用 scope 添加自定义方法以添加您自己的授权伪属性。 (当前用户)来确定权限。

如果你使用 CanCan,你可以实例化你的能力类来访问 can?方法:
attributes :can_update, :can_delete

def can_update
  # `scope` is current_user
  Ability.new(scope).can?(:update, object)
end

def can_delete
  Ability.new(scope).can?(:delete, object)
end

关于ruby-on-rails - 使用 active_model_serializers 序列化权限(例如 CanCan),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660179/

相关文章:

ruby-on-rails - 事件管理员 : undefined method `access_denied'

ruby-on-rails - 是否可以使用具有两个能力等级的康康

ruby-on-rails - ActiveModel - 查看 - Rails 中的 Controller 而不是 ActiveRecord?

ruby-on-rails - 范围关联元素与连接表

mysql - 从 Mac Rails 应用程序连接到 Windows 7 计算机上运行的 MySQL?

ruby-on-rails - 将多维数组的元素插入 Ruby 中的另一个数组

ruby-on-rails - 正则表达式:匹配排他性的非此即彼

ruby-on-rails - 在使用 cancancan 时添加没有对应模型的 Controller

ruby-on-rails - rails : In Rails how to use the model’s Attribute API on a tableless model

ruby-on-rails - 在控制台中每行显示一个集合中的对象