Разрешение пользователя Cancan? - PullRequest
1 голос
/ 06 марта 2012

Я использую cancan для разрешений, и мне бы хотелось, чтобы пользователи не могли видеть других пользователей при посещении их профиля / страницы пользователей.Пользователь должен видеть только себя.

В моем файле able.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 ]

1 голос
/ 07 марта 2012

Я предполагаю, что большинство пользователей начинают с роли : новобранец , и у вас есть возможность

can :read, :all

для пользователей с ролью : новобранец. Тогда это означает, что все: новички смогут прочитать все ресурсы.

1 голос
/ 06 марта 2012

Должно быть:

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