ユーザーリソースにネストされたプロジェクトリソースがあります。
私のCancanAbilityクラスは次のとおりです。
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
いくつか質問があります:
:read Userを拒否し、:read Projectを許可して、全員が/ users / 10 / projectsにアクセスできるようにすることはできますが、/ users /10や/usersにはアクセスできませんか?
他のuser_idで:newアクションにアクセスするユーザーを拒否するにはどうすればよいですか?たとえば、私が追加した場合
#everyone
can :read, User
can :read, Project
このコードにより、ID42のユーザーは/user / 41 / projects/newにアクセスできます。