伙计们,我这里有五个表--会话、用户、users_2_groups、permissions_attribute和权限。为了简化,让我们考虑:
我创建了一个查询来检查用户是否通过iduserid、groupusergroupid和typeuser_type_id拥有正确的权限,并且它工作得很好,但是对于一个权限,我想修改我的查询,以支持检查一个或多个权限。下面是我的查询,它支持一个权限:
SELECT p.permissionid,f.userid,f.user_type_id,t.perm_att_id,t.perm_att_label,p.permission_value
FROM
(SELECT s.userid AS userid,u.user_type_id FROM sessions s,users u WHERE s.sid='f7b24e6cc4f9325c946d7c4522411ab1' AND u.userid=s.userid) AS f
JOIN permissions_attribute AS t ON t.perm_att_label='show-dashboard'
JOIN permissions AS p ON (p.perm_att_id=t.perm_att_id AND p.perm_appendto='user' AND p.perm_appendid=f.userid AND p.permission_value=1)
OR (p.perm_att_id=t.perm_att_id AND p.perm_appendto='type' AND p.perm_appendid=f.user_type_id AND p.permission_value=1)
OR (p.perm_att_id=t.perm_att_id AND p.perm_appendto='group' AND p.perm_appendid IN (SELECT usergroupid FROM users_2_groups WHERE userid=f.userid ) AND p.permission_value=1)更新:权限模块的工作方式如下:
- by assigned permissions to the user directly [userid]
- by assigned permissions to the group [usergroupid]
- by assigned permissions to the user type [user\_type\_id] when i check for a permissions, query shall be search for them into all three way [user,group and type]. now i need to pass tow or more permissions label [perm\_att\_label] to check if its assigned or not?
我说清楚了吗?提前感谢您的帮助。
发布于 2014-05-27 23:13:32
查询的可读性很低。在编写sql查询时要记住以下几点:
sessions s,users u)。这种语法通常是不赞成的。SELECT (...) FROM (SELECT ... FROM)构造。这对可读性来说是很糟糕的。如果必须从其他查询中选择某些内容,请使用WITH。但是,在这种情况下,我看不出你需要这个的任何理由。ON子句中添加联接列。将WHERE子句用于更一般的约束(如s.sid='f7b24e6cc4f9325c946d7c4522411ab1' )p.permission_value=1考虑到这一点,我重写了您的查询。然而,你的问题的解决方案似乎相当琐碎。有什么理由不能这样做吗?
SELECT p.permissionid, u.userid, u.user_type_id, t.perm_att_id, t.perm_att_label, p.permission_value
FROM sessions s
INNER JOIN users u ON u.userid=s.userid
INNER JOIN permissions_attribute t ON t.perm_att_label='show-dashboard'
INNER JOIN permissions AS p ON p.perm_att_id=t.perm_att_id
WHERE s.sid='f7b24e6cc4f9325c946d7c4522411ab1'
AND p.permission_value IN (1,2,3,...) -- <- have you tried this?
AND ((p.perm_appendid=u.userid AND p.perm_appendto IN ('user','type'))
OR (p.perm_appendto='group' AND p.perm_appendid IN
(SELECT usergroupid FROM users_2_groups WHERE userid = u.userid);https://stackoverflow.com/questions/23900144
复制相似问题