2011-11-17 6 views
0

사용자> user_has_role> 역할> role_has_permission> 권한사용자 역할 권한 쿼리

사용자는 0 또는 * 역할을 가질 수 있습니다. 그리고 역할은 0 또는 * 권한을 가질 수 있습니다.

이제 사용자에게 속한 모든 권한을 얻는 쿼리가 생깁니다. 이 작업은하지만 지금은 사용자가 "super_admin"역할을 가지고 있으면 모든 권한이 결합되기를 바랍니다. 그러나 테이블 role_has_permission에서 그들을 구체화하지 않고.

는 쿼리입니다 :

SELECT  p.name,r.name role 
FROM   user_has_role AS ur 
JOIN   role AS r 
ON   ur.role_id = r.id 
JOIN   role_has_permission AS rp 
ON   r.id = rp.role_id 
LEFT JOIN  permission AS p 
ON   rp.permission_id = p.id 
WHERE   ur.user_id = [USER_ID] 
+0

"이 일을하지만 지금은 사용자가 역할을하면 것을 싶다"super_admin "모든 권한 합류 얻을 ", 그 혼란스러워, 설명해 주시겠습니까? – Zohaib

답변

1

당신은 노조 다만 수 :

SELECT  p.name,r.name role 
FROM   user_has_role AS ur 
JOIN   role AS r 
ON   ur.role_id = r.id 
JOIN   role_has_permission AS rp 
ON   r.id = rp.role_id 
LEFT JOIN  permission AS p 
ON   rp.permission_id = p.id 
WHERE   ur.user_id = [USER_ID] 
UNION 
    SELECT p.name, 'super_admin' 
    FROM permission 
    WHERE EXISTS (SELECT * FROM user_has_role, role 
       WHERE ur.user_id = [USER_ID] and role.role_id = user_has_role.role_id and    
       role.name = 'super_admin') 
+0

고마워요! 이것이 최고의 해결책인지는 모르지만 지금은 효과가 있습니다. 나중에 좀 더 연구 할거야. – user1051892

관련 문제