У меня есть ресурс Projects, который вложен в ресурс Пользователей.Rails cancan разрешает вложенные ресурсы
Мой Канкан класс способность:
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
У меня есть несколько вопросов:
Можно ли отрицать: чтение пользователя и позволяет: прочитать Project, чтобы каждый мог получить доступ/users/10/projects, но не/users/10 или/users?
Как я могу запретить пользователю доступ: новое действие с другим user_id? Например, если я добавлю
#everyone
can :read, User
can :read, Project
Этот код позволяет пользователю с id 42 обращаться к пользователю/41/projects/new.