내 앱에서 다른 역할로 프로젝트에서 Rails 4를 사용하고 있으며 사용중인 다른 역할에 대해 다른 액세스 권한을 부여해야합니다 gem 'six'
. 하지만 구성 할 수 없습니다.
내에서 user Model
정의
ROLES = %w[ ADMIN STUDENT TEACHER ]
내 애플리케이션 컨트롤러
before_action :add_abilities
helper_method :abilities, :can?
def abilities
@abilities ||= Six.new
end
private
def can?(object, action, subject)
abilities.allowed?(object, action, subject)
end
def add_abilities
abilities << Ability
end
내 능력 .rb
`
class Ability
class << self
def allowed(user, subject)
return [] unless user.kind_of?(User)
case subject.class.name
when "School" then school_abilities(user, subject)
when "Standard" then standard_abilities(user, subject)
when "Section" then section_abilities(user, subject)
when "Subject" then subject_abailities(user, subject)
when "Test" then test_abilities(user, subject)
when "Teach" then teach_abitities(user,subject)
when "Study" then Study_abilities(user,subject)
when "Participate" then participate_abilities(user, subject)
else []
end.concat(global_abilities(user))
end
def global_abilities(user)
rules = []
rules << :create_school
rules
end
def school_abilities(user, school)
rules = []
# if User::ROLES.first == "ADMIN"
# rules += school_admin_rules
# end
# if User::ROLES.last == "TEACHER"
# rule += school_teacher_rules
# end
# if User::ROLES.second == "STUDENT"
# rule += school_student_rules
# end
if user.role == "ADMIN"
rules += school_admin_rules
end
if user.role == "TEACHER"
rule += school_teacher_rules
end
if user.role == "STUDENT"
rule += school_student_rules
end
rules.flatten
end
def school_student_rules
[
:read_test
]
end
def school_teacher_rules
[
:read_test,
:write_test,
:modify_test,
:create_test
]
end
def school_admin_rules
[
:admin_school,
:change_school,
:rename_school,
:remove_school,
:modify_school,
:write_school
]
end
[:issue, :note, :snippet, :merge_request].each do |name|
define_method "#{name}_abilities" do |user, subject|
if subject.school == user
[
:"read_#{name}",
:"write_#{name}",
:"modify_#{name}",
:"admin_#{name}"
]
elsif subject.respond_to?(:teach) && subject.teach == user
[
:"read_#{name}",
:"write_#{name}",
:"modify_#{name}"
]
elsif subject.respond_to?(:study) && subject.study == user
[
:"read_#{name}",
:"write_#{name}"
]
else
subject.respond_to?(:school) ? school_abilities(user, subject.school) : []
end
end
end
end
end
`
선택한 역할이 교사 인 경우 그녀는 다른 컨트롤러가 아닌 테스트 컨트롤러에만 액세스 할 수 있습니다. 어떻게 할 수 있습니까? 누군가 나를 도와주세요. 미리 감사드립니다
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다