gpt4 book ai didi

ruby-on-rails - 如何允许用户使用 cancan 仅访问他们自己的展示页面?

转载 作者:行者123 更新时间:2023-12-04 13:54:35 25 4
gpt4 key购买 nike

我一直在浏览关于使用 cancan gem 的 railscast,但我坚持如何只允许用户访问他们自己的显示页面。

我的代码如下所示:

能力模型

class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role == "admin"
can :manage, :all
else
can :read, :all
if user.role == "author"
can :create, Review
can :update, Review do |review|
review.try(:user) == user
end
can :update, User do |user|
user.try(:current_user) == current_user
end
end
if user.role == "owner"
can :update, Venue
end
end
end
end

用户 Controller
class UsersController < ApplicationController
load_and_authorize_resource
end

用户(作者)只能更新他们自己的评论,但可以通过更改 URL 来查看当前所有用户显示的页面。

我在这里缺少什么?

最佳答案

可以在您的能力类(class)中直接传递约束,甚至比您尝试的方式更容易。我确定这缺少您希望拥有的一些能力,但这应该可以帮助您入门。我假设评论 :belong_to外键为 :user_id 的用户.看起来您还需要对 Venues 进行某种类似的约束,但是您的代码中没有它,所以我没有将其放在此处。

class Ability
include CanCan::Ability

def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role == "admin"
can :manage, :all
elsif user.role == "author"
can :create, Review
can :update, Review, :user_id => user.id
can [:show, :update], User, :id => user.id
elsif user.role == "owner"
can :update, Venue
can [:show, :update], User, :id => user.id
else
can [:show, :update], User, :id => user.id
end
end
end

关于ruby-on-rails - 如何允许用户使用 cancan 仅访问他们自己的展示页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323658/

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