我有权限/权限 - 表格如下:
+----+----------+----------+------+-------+
| id | name | usertype | read | write |
+----+----------+----------+------+-------+
| 1 | test | A | 0 | 0 |
| 2 | test | MU | 1 | 1 |
| 3 | test | U | 1 | 1 |
| 4 | apple | A | 1 | 1 |
| 5 | apple | MU | 1 | 0 |
| 6 | apple | U | 0 | 0 |
| 7 | flower | A | 0 | 0 |
| 8 | flower | MU | 0 | 0 |
| 9 | flower | U | 1 | 1 |
+----+----------+----------+------+-------+
有3种使用类型:A(管理员),MU(维护用户),U(标准用户)
usertypes是分层的:A > MU > U
( usertypes在数据库中保存为CHAR(2)
,遗憾的是我无法更改)
现在我想构建一个实现我的usertypes的层次逻辑的查询。
e.g。 usertype' A'没有获得读取或写入名称' test'的东西的许可,因此使用类型' MU'和' U'也应该没有权限,他们的read = 1
和write = 1
应该被忽略。
我知道当前登录的是哪种usertype。
我想,我不得不检查所有分层前辈的name
的最小读/写权限。但我不知道如何检查,因为usertype
不是数字字段。
这是我迄今为止所尝试过的:
SELECT
name,
MIN(read),
MIN(write),
CASE
WHEN usertype = 'A' THEN 0
ELSE (CASE
WHEN usertype = 'WU' THEN 1
ELSE 2
END)
END userval
FROM
permissions
-- WHERE usertype <= :current_usertype
GROUP BY name
这似乎有效,但我不知道如何让我的条件WHERE usertype <= :current_usertype
正常工作,因此层次结构中的用户类型无法获得{{1}的更多权限而不是&#34;更高&#34;用户类型。
任何想法?
提前感谢!
答案 0 :(得分:0)
这就是我解决问题的方法:
<强> 1。我添加了另一个表&#34; permission_groups&#34;到数据库:
+----+----------+--------+
| id | usertype | value |
+----+----------+--------+
| 1 | A | 100 |
| 2 | MU | 20 |
| 3 | U | 10 |
+----+----------+--------+
的 2。然后我把这张桌子加到我原来的桌子上#34;权限&#34;我在问题中表明了这一点:
在这里,我得到了我的&#34; permission_groups&#34;带子查询的表。此值表示我的不同usertypes的层次结构顺序。
SELECT
perm.name,
MIN(perm.`read`),
MIN(perm.`write`),
group .value
FROM
permissions perm
LEFT JOIN permission_groups group ON group.usertype = perm.usertype
WHERE
group.value >= (SELECT value from permission_groups WHERE usertype = :current_usertype)
GROUP BY perm.name
在我的情况下, :current_usertype
是PDO
参数,它被当前用户的usertype取代。