Row*_*ish 12 ruby-on-rails policies ruby-on-rails-4 pundit
我对Rails很新,我对以下策略有问题(使用Pundit):我想比较两个对象:@record
并且@foo
,如您所见:
class BarPolicy < ApplicationPolicy
def show?
@record.foo_id == @foo
end
end
Run Code Online (Sandbox Code Playgroud)
我找不到将第二个参数传递给pundit方法(@foo)的好方法.
我想做点什么:
class BarsController < ApplicationController
def test
authorize bar, @foo, :show? # Throws ArgumentError
...
end
end
Run Code Online (Sandbox Code Playgroud)
但Pundit授权方法只允许两个参数.有没有办法解决这个问题?
谢谢!
Row*_*ish 16
我在这里找到了答案.
这是我的方式:
添加pundit_user
功能ApplicationController
:
class ApplicationController < ActionController::Base
include Pundit
def pundit_user
CurrentContext.new(current_user, foo)
end
Run Code Online (Sandbox Code Playgroud)
创建CurrentContext
类:
/lib/pundit/current_context.rb
class CurrentContext
attr_reader :user, :foo
def initialize(user, foo)
@user = user
@foo = foo
end
end
Run Code Online (Sandbox Code Playgroud)
更新初始化Pundit方法.
class ApplicationPolicy
attr_reader :user, :record, :foo
def initialize(context, record)
@user = context.user
@foo = context.foo
@record = record
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3308 次 |
最近记录: |