我对Rails很新,我对以下策略有疑问(使用 权威人士):我想比较两个对象: @record
和 @foo
,你可以在这里看到:
class BarPolicy < ApplicationPolicy
def show?
@record.foo_id == @foo
end
end
我找不到将第二个参数传递给pundit方法(@foo)的好方法。
我想做的事情如下:
class BarsController < ApplicationController
def test
authorize bar, @foo, :show? # Throws ArgumentError
...
end
end
但Pundit授权方法只允许两个参数。
有没有办法解决这个问题?
谢谢!
我找到了答案 这里。
这是我的方式:
添加一个 pundit_user
功能 ApplicationController
:
class ApplicationController < ActionController::Base
include Pundit
def pundit_user
CurrentContext.new(current_user, foo)
end
创建 CurrentContext
类:
/lib/pundit/current_context.rb
class CurrentContext
attr_reader :user, :foo
def initialize(user, foo)
@user = user
@foo = foo
end
end
更新初始化Pundit方法。
class ApplicationPolicy
attr_reader :user, :record, :foo
def initialize(context, record)
@user = context.user
@foo = context.foo
@record = record
end
end
我找到了答案 这里。
这是我的方式:
添加一个 pundit_user
功能 ApplicationController
:
class ApplicationController < ActionController::Base
include Pundit
def pundit_user
CurrentContext.new(current_user, foo)
end
创建 CurrentContext
类:
/lib/pundit/current_context.rb
class CurrentContext
attr_reader :user, :foo
def initialize(user, foo)
@user = user
@foo = foo
end
end
更新初始化Pundit方法。
class ApplicationPolicy
attr_reader :user, :record, :foo
def initialize(context, record)
@user = context.user
@foo = context.foo
@record = record
end
end