php - 在处理用户权限时,如何根据 SQL 表中的值获取所有可能的结果?

标签 php mysql sql-server mysqli

我有5张表,只需要其中4张就可以得到我想要的结果。这些表是:

--------------
| Roles      |
--------------
| ID | NAME  |
--------------
| 1  | Admin |
--------------
| 2  | User  |
--------------

-------------
| USERS     |
-------------
| ID | NAME |
-------------
| 1  | Dan |
-------------
| 2  | Dave  |
-------------
| 3  | Mike |
-------------

--------------------------------
|         navigation           |
--------------------------------
| ID         | navlinks        |
--------------------------------
| 1          | Home            |
--------------------------------
| 2          | Admin Page      |
--------------------------------

用于分配用户角色的表

--------------------------
| user_roles             |
--------------------------
| ID | user_id | role_id |
--------------------------
| 1  | 1       | 1       |
--------------------------
| 2  | 2       | 2       |
--------------------------
| 3  | 3       | 1       |
--------------------------

用于将允许的 user_roles 分配给每个导航导航链接的表

----------------------------------
| navigation_roles               |
----------------------------------
| ID | navigation_id | user_role |
----------------------------------
| 1  | 1             | 1         |
----------------------------------
| 2  | 1             | 2         |
----------------------------------
| 3  | 2             | 1         |
----------------------------------

我希望能够获取允许每个用户访问的 user.name 列和 navigation.navigation_name 列。

Dan 和 Dave 应显示“管理”和“主页”链接,而 Mike 只能看到“主页”。但我的解决方案仅显示 Dave 的管理员和主页,而 Dan 只具有主页链接,而他也应该显示管理员链接。

select users.name, navigation.navlinks FROM users
LEFT JOIN user_roles on users.id = user_roles.user_id
LEFT JOIN navigation_roles ON navigation_roles.role_id = user_roles.role_id
RIGHT JOIN navigation on navigation.id = navigation_roles.navigation_id;

上面的内容告诉我:

----------------
| Dan  | Home  |
----------------
| Dave | Home  |
----------------
| Mike | Home  |
----------------
| Dave | Admin |
----------------

什么时候应该向我展示:

----------------
| Dan  | Home  |
----------------
| Dave | Home  |
----------------
| Mike | Home  |
----------------
| Dave | Admin |
----------------
| Dan  | Admin |
----------------

最佳答案

问题出在 navigation_roles 表中的 role_id 值。

关于php - 在处理用户权限时,如何根据 SQL 表中的值获取所有可能的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45425575/

相关文章:

sql - SQL Server 是否真的计算 case 表达式中的每个 'then' 子句?

php - 如何使用php比较和查看mysql中的三个表?

php - 如何加快 MySQL 产品搜索结果的速度?

php - 在 Bluemix 中激活 PHP 扩展

php - 通知: Undefined index: ($_FILES)

python - 无法使用 Python 的 MySQLdb 连接到 localhost

sql - 在 SQL 语句中将 'IN' 与子查询一起使用

SQL Server - 从表变量中删除不是即时的?

php - 在同一个对象中获取一个线程及其最新的帖子,latest() 会产生巨大的开销

php - 尝试加载外部 css 文件时 PHP 本地计算机出现 404 错误,但在线一切正常