2012-03-06 3 views
1

Я использую 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' 

ответ

1

Оно должно быть:

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

работал, но я могу видеть других пользователей? Какие-либо предложения? – coletrain

+0

Каковы твои роли? –

+0

Мои роли новичок и администратор – coletrain

1

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

can :read, :all 

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

Смежные вопросы