我一直在学习使用cancan宝石的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
用户控制器
class UsersController < ApplicationController
load_and_authorize_resource
end
一个用户(作者)只能更新自己的评论,但是目前可以通过修改URL查看所有用户的展示页面。
我这里漏掉了什么?
can :read, :all
这一行。你允许所有用户查看所有页面。 - mirelon