У меня есть ресурс Projects, вложенный в ресурс Users.
Мой класс Cancan Ability это:
class Ability
include CanCan::Ability
def initialize(user)
#everyone
can :read, Project
if user.blank?
# guest user
...
else
#every signed in user
case user.role
when User::ROLES[:admin]
#only admin role user
can :manage, :all
when User::ROLES[:member]
#only member role user
can :update, User, :id => user.id
can [:create, :update, :destroy], Project, :user_id => user.id
else
end
end
end
end
И контроллер проектов:
class ProjectsController < ApplicationController
load_and_authorize_resource :user
load_and_authorize_resource :projects, :through => :user, :shallow => true
...
end
У меня несколько вопросов:
Можно ли запретить: читать пользователя и разрешить: читать проект, чтобы каждый мог получить доступ к / users / 10 / projects, но не / users / 10 или / users?
Как я могу запретить пользователю доступ: новое действие с другим user_id? Например, если я добавлю
#everyone
can :read, User
can :read, Project
, этот код позволит пользователю с идентификатором 42 получить доступ к /user/41/projects/new.