1

В ability.rb У меня есть следующие высказывания:Как заставить CanCan разрешить пользователю просматривать собственный профиль в Rails?

if user.is_employee? 
    can :schedule, Employee, id: user.employee.id 
end 

Это позволит сотрудникам просматривать свой график на /employees/273/schedule. Этот URL-адрес будет работать, если идентификатор сотрудника равен 273. Это работает ... сотрудник может просматривать этот URL-адрес. Проблема в том, что сотрудники могут просматривать все другие идентификаторы также. Не должны ли вышеуказанные лимиты ограничивать только свой собственный идентификатор?

UPDATE: Вот мой EmployeeController:

class EmployeeController < ApplicationController 
    before_filter :authenticate_user! 
    authorize_resource 
    def schedule 
    @employee = Employee.find(params[:id]) 
    end 
end 
+0

показать контроллер пожалуйста – apneadiving

+0

@apneadiving - я отправил контроллер в вопросе –

+1

вам необходимо загрузить и санкционировать ресурс, если вы хотите, чтобы проверить условия на ней – apneadiving

ответ

1

удалить authorize_resource из контроллера и добавить authorize! :schedule, @employee после @employee = Employee.find(params[:id])

контроллера

class EmployeeController < ApplicationController 
    before_filter :authenticate_user! 

    def schedule 
    @employee = Employee.find(params[:id]) 
    authorize! :schedule, @employee 
    end 
end 

затем в вашем ability.rb. ..

if user.is_employee? 
can :schedule, Employee do |emp| 
    user.employee.id == emp.id 
end 
end 
Смежные вопросы