9

几天来,我一直试图找到解决这个问题的方法,但我似乎无法想出可行的方法。问题如下:

我目前正在开发一个统计工具,它显示了几个应用程序的一些图表和数据。显然需要限制对这些数据的访问,因为用户 A 拥有应用程序“一”和“二”,并且不能看到“三”或“四”。

现在,每个用户可以是多个组的成员并从该组继承权限,但也可以拥有单独的权限。必须为每个应用程序设置这些权限。在以下情况下,授予对一个应用程序的一组数据的访问权限:

  • 用户本人有权访问本应用的这条数据
  • 用户所属的任何一个组都有权访问该应用程序的这条数据

http://i.stack.imgur.com/y4W6E.png

目标是拥有一个表,该表存储每个用户当前对每个应用程序拥有的实际权限,根据组成员资格和个人权限计算得出,并且由于与其他表的关系,该信息始终保持一致。

我不知道这是否有助于找到解决方案,但这是获取 id 为 1 的用户当前活动权限的 SQL:

(
SELECT u.perm_id AS perm, u.user_id AS uid, u.app_id AS app
FROM daUsers_has_daPermissions AS u
WHERE u.user_id = 1
)
UNION
(
SELECT g.perm_id AS perm, u.user_id AS uid, g.app_id AS app
FROM daUsers_has_daPermissions AS u, daUsergroup_has_daPermissions AS g, daUsergroup_has_daUsers AS g_has_u
WHERE u.user_id = 1
AND u.user_id = g_has_u.user_id
AND g.group_id = g_has_u.group_id
);

这就是我想要存储在额外表中的内容(仅适用于所有用户)。

4

1 回答 1

4

在我看来,您应该使用视图。您已经有了查询,使用查询来创建视图。

于 2013-04-12T06:48:42.273 回答