사용자는 특정 위치 및 카테고리 조합에 대해 기사를 관리 할 수있는 권한이 있습니다.permissons 조인 테이블이있는 선언적 승인
예를 들어 Dave는 파리의 HR 기사를 관리 할 수 있습니다. Paul은 런던의 비즈니스 기사를 관리 할 수 있습니다. 다음과 같이
모델과 협회는 다음과 같습니다
- 사용자가
- 권한을 사용자, 위치 및 카테고리에 속하는 많은 권한이
- 위치가 많은 기사를 가지고 분류는 많은 기사와 권한이
- 및 허가
- 기사는 위치와 범주에 속합니다
내가 말할 수 :
has_permission_on :articles, :to => :manage do
if_attribute :location => { :permissions => { :user_id => is {user.id} }, :category => { :permissions => { :user_id => is {user.id} } }
end
을 내가 permitted_to 호출하면? (: 삭제) (그 카테고리 ID 1893과 위치 ID 2939입니다) 문서 기록에서 다음 쿼리가 실행됩니다
SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 1893 LIMIT 1
SELECT `permissions`.* FROM `permissions` WHERE (`permissions`.category_id = 1893)
SELECT `locations`.* FROM `locations` WHERE `locations`.`id` = 2939 LIMIT 1
SELECT `permissions`.* FROM `permissions` WHERE (`permissions`.location_id = 2939)
내가 실행해야하는 것은 정말이 달성 할 수있는 방법은
SELECT `permissions`.* FROM `permissions` WHERE (`permissions`.category_id = 1893 AND `permissions`.location_id = 2939)
있습니까?
미리 감사드립니다.
업데이트
좋아, 그래서 지금은 문서 모델의 인스턴스 방법이 있습니다
def permitted_user_ids
Permission.select('user_id').where(:location_id => location_id, :category_id => category_id).map(&:user_id)
end
을 내 규칙은 지금 :
has_permission_on :articles, :to => :manage do
if_attribute :permitted_user_ids => contains { user.id }
end
이제 때 기사 레코드 wh에 대해 permitted_to? (: delete) (또는 읽기/업데이트/생성/관리)를 호출합니다. ose category id가 1893이고 위치 ID가 2939이면 다음 쿼리가 실행됩니다.
SELECT user_id FROM `permissions` WHERE `permissions`.`category_id` = 1893 AND `permissions`.`location_id` = 2939
... 정확히 내가 원하는 것입니다.
with_permissions_to 범위가 매우 이상하게 작동하는 것을 제외하고는.
Article.with_permissions_to(:read)
지금 생성
SELECT `articles`.* FROM `articles` WHERE (`articles`.`id` = 9473)
... 9473은 현재 사용자의 ID입니다!
나는 매우 혼란 스럽다.
당신이 맞습니다 - 권한은 사용자, 위치 및 카테고리에 속하며 사용자, 위치 및 카테고리에는 각각 많은 권한이 있습니다 - 나는 그 질문을 수정했습니다. 건배. – marc