1
CanCan 및 rolify을 사용하여 팜 모델에 대한 액세스 권한을 설정합니다.CanCan/Rolify : 모델의 사용자에 대한 읽기 액세스가 거부되었습니다.
# ability.rb
class Ability
include CanCan::Ability
def initialize(user)
# Create guest user aka. anonymous (not logged-in) when user is nil.
user ||= User.new
if user.has_role? :admin
can :manage, :all
else # guest user aka. anonymous
can :read, :all
# logged in user
if user.has_role? :user
can :create, Farm
can :manage, Farm, :user_id => user.id
end
end
end
end
여기에 나열된 몇 가지 테스트 데이터를 내 응용 프로그램을 씨앗 :
# seeds.rb
puts 'SETTING UP DEFAULT USER LOGIN'
user1 = User.create! name: 'First User', email: '[email protected]', password: 'password'
puts 'New user created: ' << user1.name
user2 = User.create! name: 'Second User', email: '[email protected]', password: 'password'
puts 'New user created: ' << user2.name
user9 = User.create! name: 'Default Admin', email: '[email protected]', password: 'password'
puts 'New user created: ' << user9.name
puts 'ADDING SPECIAL ROLES TO USERS'
# No role for user1 here.
user2.add_role! :user
user2.save!
user9.add_role :admin
user9.save!
puts 'SETTING UP SOME FARMS'
farm1 = Farm.create! name: 'User1 farm', location: 'Mexico'
farm1.user = user1
farm1.save!
puts 'New farm created: ' << farm1.name
farm2 = Farm.create! name: 'User2 farm', location: 'Bolivia'
farm2.user = user2
farm2.save!
puts 'New farm created: ' << farm2.name
farm3 = Farm.create! name: 'Nobody\'s farm', location: 'Death Valley'
puts 'New farm created: ' << farm3.name
을 나는 농장은 사용자에 의해 (읽기 전용) 액세스 할 수있는 알아 레일 콘솔에서 다음 명령을 실행합니다 :
> Farm.accessible_by(Ability.new(User.find_by_name("First User"))).count
=> 3
> Farm.accessible_by(Ability.new(User.find_by_name("Second User"))).count
=> 1
> Farm.accessible_by(Ability.new(User.find_by_name("Default Admin"))).count
=> 3
user1에는 할당 된 역할이 없습니다.
질문 : 사용자 2가 ability.rb
에 정의 된대로 모든 팜에 액세스 할 수없는 이유는 무엇입니까?