2016-11-18 12 views
0

예를 들어, 사용자는 adminplayer 일 수 있으며 사용자가 기본 역할을 설정하기를 원합니다. 예를 들어 player 일 수 있으며 나중에 전환하여 admin이됩니다.rollify가있는 사용자의 주 역할을 어떻게 디자인해야합니까?

명백한 것은 User 모델에 과 함께 main_role을 붙이는 것입니다.

그러나 저는 사용자의 역할과 동기화하여 주요 역할을 유지해야한다는 것에 우려하고 있습니다. 예를 들어 사용자가 더 이상 플레이어가 아니면 그녀의 main_role은 플레이어의 사람이 될 수 없습니다.

제가 생각한 또 다른 방법은 첫 번째 역할을 주역으로하는 역할을 주문하는 것입니다. 나는 그것을 할 수있는 쉬운 방법을 찾을 수 없습니다.

Ex: user.roles.map(&:name) => ["admin", "player"] 이 경우, 주된 역할은 "admin"이며 주 역할이 플레이어가되도록하려면 먼저 "player"를 바꿀 수 있습니다.

아무도이 문제를 처리하기위한 좋은 제안이 있습니까?

감사합니다.

+0

[Rolify gem] (https://github.com/RolifyCommunity/rolify)를 말하고 있습니까? 그렇다면이 컨텍스트에서 주 역할과 보조 역할의 개념에 대해 다소 혼란 스럽습니다. 이진 역할이 아니거나 역할에 대한 권한 부여가 있거나 그렇지 않은 경우입니다. 주 역할과 보조 역할을 구별하는 동기는 무엇입니까? – David

+0

음, 모바일 클라이언트가 있고 사용자가 관리자인지 아닌지에 따라 다른보기를 표시한다고 가정 해 보겠습니다. 예를 들어, 누군가가 앱을 사용하는 것과 그 앱을 단독으로 사용하고있을 때 등이 있습니다. – okysabeni

+0

제 생각에는 제가 생각하기에 '주요'역할 정의의 개념이 무엇인지 생각합니다. 사용자가 관리자와 플레이어의 역할을 가지고 있다면 ... 분명히 그들은이 두 가지 역할과 관련된 모든 권리를 가지고 있습니다 ... 그 중 하나를 '주요한'역할로 앱에 어떻게 활용할 수 있습니까? 개인적으로 나는 여러 가지 역할에 대한 개념을 고집하지 않을 것입니다.이 시나리오에서는 3 가지 역할 중 하나 인 사용자 (player, admin, admin-player) 중 하나를 선택했습니다. 관리자는 플레이어와 관리자의 권리를 상속받을 수 있습니다. 하지만 나는 rolify를 사용하지 않기 때문에 나는 논평 할 자격이 없을 것입니다. – David

답변

0

"current_role"이라고하는 것이 좋습니다.

역할 목록을 변경할 때 현재 역할을 확인하는 것을 두려워하지 마십시오.

사용자가 자신의 current_role 인 역할을 상실한 경우 current_role을 자신의 목록에서 다음 것으로 변경하십시오.

예, 사용자 테이블의 ON DELETE RESTRICT, ON UPDATE CASCADE와 외래 키가있는 role_id를 참조하는 current_role을 사용하는 것이 좋습니다.

postgres 이외의 것을 사용하는 경우 레일의 db 일관성 검사를 사용하십시오.

+0

Curren 역할은 더 나은 용어입니다. 따라서 role_id를 참조하는 current_role을 사용하는 것이 좋습니다. – okysabeni