저는 아직 레일스와 activerecord를 처음 사용하기 때문에 잠깐만 기다려주세요.사용자, 역할 및 프로젝트를 만드는 레일
나는 사용자 정의 역할을 사용하여 권한 체계를 만들기 위해 함께 묶으려는 3 가지 모델 (그리고 실제로 묶는 4 가지 모델)이 있습니다.
class User < ActiveRecord::Base
has_many :user_projects
has_many :projects, :through => :user_projects
has_many :project_roles, :through => :user_projects
end
class Project < ActiveRecord::Base
has_many :user_projects
has_many :users, :through => :user_projects
has_many :project_roles
end
class ProjectRole < ActiveRecord::Base
belongs_to :projects
belongs_to :user_projects
end
class UserProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
has_one :project_role
attr_accessible :project_role_id
end
project_roles 모델에는 사용자 정의 역할 이름과 특정 역할에 특정 작업에 대한 사용 권한이 있는지 여부를 정의하는 불린이 포함됩니다. 내 응용 프로그램의 프로젝트 부분에서 쉽게 참조 할 수있는 우아한 솔루션을 찾고 있습니다.
저는 이미 전체 애플리케이션에 구현 된 역할 시스템을 보유하고 있습니다. 내가 정말로 찾고있는 것은 사용자가 프로젝트별로 자신의 역할을 관리 할 수 있다는 것입니다. 모든 프로젝트는 불변의 기본 관리 역할로 설정되고 프로젝트 생성자는 프로젝트 생성시 추가됩니다.
사용자가 역할을 작성하기 때문에 연관성을 통해 프로젝트 및 사용자 모델에서 역할 이름 목록을 가져올 수 있기를 원하지만 액세스를 테스트하기 위해 간단히 참조하고자합니다 그 (것)들은 이름으로 그들을 참조하지 않고도 액세스 할 수있는 것입니다.
아마도 이와 비슷한가요?
def has_perm?(permission, user) # The permission that I'm testing
user.current_project.project_roles.each do |role|
if role.send(permission) # Not sure that's right...
do_stuff
end
end
end
나는 내가 가장이 구현할 수있는 방법에 대한 원에서 계속 실행하기 때문에 나는이 일에 내 머리에있어 생각합니다.
조금 명확하게하기 위해 질문을 업데이트했습니다. 나는 보석을 들여다 보았고, 실제로는 맞지 않는 듯하다. 그 이유는 역할의 이름이 무엇인지 알 수 없으므로 역할 이름을 기반으로 액세스를 참조 할 수 없기 때문입니다. 이름은 표시 목적으로 만 사용됩니다. 그런 종류의 행동을 처리 할 수있는 보석 또는 가능성있는 해결책을 알고 있습니까? 나는 이미 가까워 졌다고 느낍니다. 거의 기능적이며 우아하지는 않습니다. :) –