2014-02-09 2 views
1

사이트 사용자 중 어떤 부분을 등록했는지에 따라 어떻게 다른 사용자 역할을 만들 수 있습니까? 예를 들어 세 가지 사용자 유형이 있습니다. 하나는 관리자이고 다른 하나는 일반 사용자이고 세 번째 사용자는 운영자입니다. 나는 다음과 같은 문자열 중 하나 절약 할 수등록하는 동안 다른 사용자 역할을 할당하는 방법은 무엇입니까?

create_table "users", force: true do |t| 
    t.string "username" 
    t.string "email" 
    t.string "role" 
    t.string "password" 
end 

내부의 "역할"열 : "관리자", "일반"또는 "사회자"

나는 다음과 같은 테이블이 있습니다.

이미 Michael Hartl's Ruby on Rails Tutorial의 도움으로 인증 시스템을 만들었습니다. 또한 railscasts 에피소드 #189 Embedded Association에서 여러 사용자 역할을 다루는 정말 좋은 접근 방식을 보았습니다.

문제는 비디오 사용자 역할은 등록 중에 선택되며 사용자가 사용자 역할을 보지 못하게하는 것입니다. 나는이 사이트의 두 부분을 가지고있다. 사용자가 한 섹션을 통해 등록하면 그는 "정규"역할을 가지며 다른 섹션을 통해 등록하면 역할 "중재자"를 갖게됩니다. 역할 "admin"은 다르게 설정됩니다.

"role"매개 변수를 전달하면 "moderator"또는 "role": "regular"하지만 안전한 옵션으로는 보이지 않습니다. 사용자에게 보이기 때문에 다른 매개 변수를 쉽게 전달할 수 있습니다. 예를 들어 사이트를 손상시키려는 일반 사용자는 "역할"을 전달할 수 있습니다 : "사회자"

감사합니다.

답변

1

CanCan과 Rolify와 함께 가고 여기에 아주 잘 설명되어 있습니다 : https://github.com/EppO/rolify/wiki/Tutorial. 그것에 대한 멋진 Railscasts가 있습니다.

이렇게하면 모든 사용자를 동일한 방식으로 추가 할 수 있으며 사용자가 가입하기로 선택한 페이지에 따라 역할을 간단하게 추가 할 수 있습니다 (그 이유는 무엇입니까?). 관리자 및 편집자를 추가 할 수있는 내부 사이트 만 있다고 가정합니다.

이제 request.original_url을 사용하고 같은 것을 할 수있는 스위치 문을 추가 할 수 있습니다 current_user.add_role "관리자"물론

당신은 또한 당신의 접근 방식을 사용하고 단지와 사용자 레코드 업데이트 할 수 있습니다 CURRENT_USER를 (또는 사용자 컨트롤러에서 만들려는 사용자)와 user.role = "admin" user.save

희망이 있습니다.

+0

감사합니다. 한 부분에 정기적으로 가입하는 사이트와 하단 가입 링크의 한 부분에서 "편집자가됩니다". 가입 양식은 동일합니다. 차이점은 두 번째 양식 사용자가 관리자 패널에 승인 할 수있는 편집기가되기 위해 적용된다는 것입니다. 문제는 매개 변수로 표시되지 않는 "역할"열을 처리하는 방법을 잘 모르겠습니다. 내게는 공격자가 쉽게 관리자가 될 수 있기 때문에 보이지 않아야합니다. 나는 너무 혼란스럽지 않기를 바란다 :) – Cristiano

+1

당신이 더 간단하게 만들고 싶다면 "편집자되기"링크에서 다른 매개 변수를 보낼 수있다. 그리고 들어오는 게시물 요청의 일부라면 당신이 할 수있는 방식으로 저장할 수있다. 승인하거나 비 승인합니다. 또한 가입 양식에 체크 박스를 추가하여 사람들이 "편집자가되기를 원하십니까?"를 확인할 수 있습니다. –

+0

감사합니다. 나는 그것을 시도 할 것이다! – Cristiano

관련 문제