Cancan用户许可?

时间:2012-03-06 14:28:10

标签: ruby-on-rails ruby ruby-on-rails-3 cancan

我使用cancan获取权限,我希望用户在访问其个人资料/用户页面时看不到其他用户。用户应该只能看到自己。

在我的ability.rb文件中,我有

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? :rookie 
     can [:update, :destroy], [Album, Photo, User]
     can :read, :all
   end

  can :manage, Album, :profile => { :user_id => user.id }
  can :manage, Photo, :profile => { :user_id => user.id }
  can :manage, Video, :profile => { :user_id => user.id }
  can :manage, Comment, :blog => { :profile => { :user_id => user.id } }
  can :manage, User, :id => user.id
 end
end

在我的users_controller中,我有

class UsersController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource 

 def index
   @user = current_user
 end

 def show
  @user = User.find(params[:id])
 end
end

以上通常有效,但由于用户是主要型号,我不知道如何解决这个问题。 Rails给我错误

undefined method `user_id'

2 个答案:

答案 0 :(得分:1)

应该是:

#ability.rb:
can :manage, User, :id => user.id

答案 1 :(得分:1)

我假设大多数用户以角色:新手开头并且你有能力

can :read, :all

对于角色为的用户:新手。那么这意味着所有:新手用户将能够阅读  所有资源。