gpt4 book ai didi

ruby-on-rails - 如何在 gem Pundit 中使用命名空间

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:36 26 4
gpt4 key购买 nike

我有 2 个 Controller ,1 个用于用户,1 个用于管理员。

Controller /articles_controller.rb

class ArticlesController < ActionController::Base
...
def show
@article = Article.find(parmas[:id])
authorize @article
end
...
end

controllers/admin/articles_controller.rb

class Admin::ArticlesController < AdminController
...
def show
@article = Article.find(parmas[:id])
authorize @article
end
...
end

我有 2 个文件策略政策/article_policy.rb

class ArticlePolicy
extend ActiveSupport::Autoload
autoload :Admin

attr_reader :user, :record

def initialize(user, record)
@user = user
@record = record
end

def show?
# allow show for every user.
true
end
end

还有一个文件policies/admin/article_policy.rb

class Admin::ArticlePolicy

attr_reader :user, :record

def initialize(user, record)
@user = user
@record = record
end

def show?
# only show if use have role manager
user.manager?
end
end

但是当我使用帐户用户在/admin/articles/1/显示文章时。它显示正常,应该是“访问被拒绝”。

如何解决这个问题? (我使用 gem pundit 1.10)。

最佳答案

使用授权方法将命名空间作为参数传递。

class ArticlesController < ActionController::Base
...
def show
@article = Article.find(parmas[:id])
authorize [:admin, @article]
end
...
end

关于ruby-on-rails - 如何在 gem Pundit 中使用命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37431792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com