2014-12-29 18 views
0

레일 4 애플리케이션에서 역할 기반 액세스 시스템을 구현하려고하고 있으며 최종 사용자 (super_admin)가 UI를 통해 역할 할당을 편집 할 수있게하려고합니다.Rolify and Rails 4 역할 관리

나는 약간의 성공을 거두었지만, 더 좋은 길을 찾아야한다고 생각합니다. 나는 다음과 사투를 벌인거야

= simple_form_for :roles, :url => create_user_roles_path(@user.id), :method => "post" do |f| 

= f.input :name, :collection => @roles, as: :check_boxes 

= f.button :submit 

:

users_roles_controller.rb 

# GET /user_roles/new/:id 
def new 
    @roles = Role.all 
end 

# POST /user_roles/new/:id 
def create 
    populated = params[:roles][:name].reject(&:empty?) 
    populated.each do |key| 
    @user.add_role Role.find(key).name 
    end 

    redirect_to users_path 
end 

그리고 내 양식에

(HAML 및 simple_form) : 여기 내 코드입니다 I 양식 항목을 확인하려면 어떻게

  1. , 모델이 없기 때문에?
  2. 강력한 매개 변수를 사용해야합니까? 그렇다면 모델없이 양식에 구현하는 방법
  3. 현재 역할은 이미 선택되어 있지만 어떻게 비슷하게 만들 수 있습니까? (진정한 역할 관리)

업데이트 나는 의견에 의해 제안 된대로 개혁 보석을 사용하여 보았다. 이것은 훌륭한 해결책 인 것 같습니다. 그러나이 사건에 대한 구현에 문제가 있습니다.

내가 그것을지도 밖으로 보자

  1. 사용자
  2. users_roles : 내가 3 개 데이터베이스의 테이블이 있습니다 -
  3. (2 개 속성으로 매핑 테이블을 USER_ID & ROLE_ID는 {> HABTM 테이블에 참여})
  4. roles

역할 모델의 모든 값이있는 양식을 확인란으로 사용하고 싶습니다. 확인란을 통해 어떤 값이 입력되어야하는지 결정해야합니다. users_roles 테이블 (특정 사용자와 관련된). 제가 개혁을 원하는 것은이 양식의 입력을 확인하는 것입니다. 이 양식은 항상 역할의 모든 값을 표시하지만 일부 또는 전체 상자는 선택 취소 될 수 있습니다.

나는 내 응용 프로그램에서 양식 폴더를 만든 다음 코드로 시작 :

class UserRoleForm < Reform::Form 

property :user__id, on: :user 
property :role_id, on: :role 

validates :user__id, presence: true 
validates :role__id, presence: true 
end 

내가 올바른 방향으로가는 건가요?

도움 주셔서 감사합니다.

+1

1. 테이블이없는 모델의 경우 [reform] (https://github.com/apotonick/reform)을 확인하십시오. –

+0

감사합니다. @JustinM. 내 게시물에 대한 업데이트를 추가했습니다. 확실히 당신이 뭔가있는 것처럼 보입니다. – Herm

답변

1

양식을 작성하는 데는 사용자의 역할과 가능한 역할이 필요합니다.

올바르게 기억한다면 rolify는 모델 연결을 제공하므로 과 같은 역할을하도록 광고하면 some_user에 적용되는 모든 역할을 반환합니다.

가능한 역할을 얻으려면 Role.all을 시도하십시오.

는 모두 결합 이제 당신은 각 루프 양식 확인란을 구축하는 데 사용할 수있는이 같은 배열을

user_roles = some_user.roles.pluck(:name) # suppose this returns ["admin"] 
Role.pluck(:name).map { |r| [r, user_roles.include?(r)] } 

시도합니다.

[["customer", false], ["admin", true], ["editor", false]] 

개량 된 개체의 동기화 또는 저장 방법을 정의하여 제출 된 입력을 어떻게 처리 할지를 정의합니다. 제출 된 역할이 유효한 역할인지 확인하기 위해 사용자 지정 유효성 검사를 수행 할 수 있습니다 (SHOULD).