我正在为我的学校作业做授权,这是一个 Reddit 克隆。我刚刚被介绍给 Pundit Gem 以对用户角色进行授权,即管理员、版主、会员和访客。
我必须这样做:
管理员和版主应该看到所有帖子,成员应该只能看到他们自己的帖子,客人应该看不到任何帖子。
以普通用户身份登录,您应该只会看到您创建的帖子。
application_policy.rb
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
# Checks if user exists and is logged in
user.present?
end
def new?
create?
end
def update?
# Checks if user is logged in, the owner or admin
user.present? && (record.user == user || user.admin?)
end
def edit?
update?
end
def destroy?
update?
end
def scope
record.class
end
end
这是我正在做的事情:
这将检查用户是否存在,以及用户是版主还是管理员,并且只授予他们查看帖子的权限。就像说明状态一样工作。
post_policy.rb
class PostPolicy < ApplicationPolicy
def index?
user.present? && (user.moderator? || user.admin?)
end
end
现在,如果我回头查看我的application_policy.rb,我可以在这里看到这一行,“检查用户是否登录、所有者或管理员”:
user.preset? && (record.user == user || user.admin?)
如果我尝试将此添加到我的索引授权中?我会继续得到一个
“PostsController#index 中的 NoMethodError”
class PostPolicy < ApplicationPolicy
def index?
user.present? && (user.moderator? || user.admin? || record.user == user)
end
end
谢谢你。