我希望在实现ACL方面获得一些想法或帮助,以便在我的PHP/MySQL应用程序中设置哪些用户具有视图、编辑、create和delete的功能。
下面是我的应用程序的主要核心模块/部分,这些模块/部分将允许我为每个用户设置一个权限级别,以确定他们可以和不能做什么.
Projects (view | edit | Create | Delete)
Project Tasks (view | edit [edit includes task title, description] | Create | Delete)
Project Task Assigned User (edit)
Project Task Due Date (edit)
Project Task Tags (edit)
Project Task Milestone (edit)
Project Tags (view | edit | Create | Delete)
Project Milestones (view | edit | Create | Delete)
Project KanBan Board (view)
Project Gantt Charts (view)
Project Wiki (view | edit | Create | Delete)
Project Stats (view | edit | Create | Delete)
Project Files (view | edit | Create | Delete)设置页为每个用户设置每个部分的权限,与此图像.类似

,对应于每个框的MySQL数据库记录,类似于这样的.

我需要帮助的地方是设置它,这样在默认情况下,当在这些节/模块中创建新记录和创建新用户时,它们将具有一些默认权限集。
例如,默认情况下,所有用户都将自动拥有对所有模块的视图权限。
然后,在另一个页面上将设置设置为每个用户,每个模块的权限,然后将超过默认权限。
所以,我不确定的是,如何基本上拥有2组权限,并将它们组合起来,并允许第二组超过第一组。
第一组是所有模块上所有用户的默认权限。在默认情况下,所有用户都可以查看所有模块,但不能编辑任何模块或删除和记录。
第二组权限覆盖每个用户、每个模块上的第一组权限。因此,如果所有用户都无法删除记录,则此设置可能允许5个用户删除记录。
我需要帮助,在整个混合/合并这2套,同时允许越位发生在PHP。
有什么办法让我这样做吗?
在我看来,下面显示的权限设置图像将存在于2页上。1页用于处理全局/默认权限,第二个设置页将设置权限覆盖。
我的解决方案理论/它是如何工作的
我认为它可以有2个PHP数组。
默认权限数组-对我们设置的每个模块/实体都有一个键/值。键是模块名。值是应用于所有用户的该模块的权限。
$defaultPermissionsArray = array(
'project' => 'view',
'project_task' => 'view',
'project_milestones' => 'view',
//... more module permissions
);用户权限数组-还有一个包含每个模块的键/值数组。然后,它对当前登录的用户具有一个权限值,该用户的键名称与该模块的默认权限数组相同,该值将超过该用户在该特定模块上的默认权限。
// This user would have permission over-ride from default permissions allowing them to edit projects and milestones
$currentUserPermissionsArray = array(
'project' => 'edit',
'project_task' => 'view',
'project_milestones' => 'edit',
//... more module permissions
);发布于 2015-08-07 01:26:56
我想出了一个基本的解决办法。不过,我以前曾说过,PHP的array_merge()添加了重复匹配键作为子数组项。NOw我看到它实际上是有效的,所以发布我的解决方案,也许有一天会帮助到某人或者我自己。
我仍然对改进的想法持开放态度。
$defaultPermissionsArray = array(
'test' => 'view',
'project' => 'view',
'project_task' => 'view',
'project_milestones' => 'view',
//... more module permissions
);
$currentUserPermissionsArray = array(
'project' => 'edit',
'project_task' => 'view',
'project_milestones' => 'edit',
//... more module permissions
);
$mergedPermissions = array_merge(
$defaultPermissionsArray,
$currentUserPermissionsArray
);结果
用户的权限与核心默认权限合并,并使用该部分的用户权限遍历模块.
当应用程序加载时,用户只对所有模块具有视图权限。运行此代码后,它们将获得两个模块的编辑权限.
Array
(
[test] => view
[project] => edit
[project_task] => view
[project_milestones] => edit
)https://stackoverflow.com/questions/31866355
复制相似问题