Rails может разрешать вложенные ресурсы

У меня есть ресурс 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.

7
задан David Senkus 22 October 2010 в 05:51
поделиться