首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACL结构,允许默认权限和第二组权限超过默认设置。

问ACL结构,允许默认权限和第二组权限超过默认设置。
EN

Stack Overflow用户
提问于 2015-08-06 21:46:09
回答 1查看 151关注 0票数 0

我希望在实现ACL方面获得一些想法或帮助,以便在我的PHP/MySQL应用程序中设置哪些用户具有视图、编辑、create和delete的功能。

下面是我的应用程序的主要核心模块/部分,这些模块/部分将允许我为每个用户设置一个权限级别,以确定他们可以和不能做什么.

代码语言:javascript
复制
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数组。

默认权限数组-对我们设置的每个模块/实体都有一个键/值。键是模块名。值是应用于所有用户的该模块的权限。

代码语言:javascript
复制
$defaultPermissionsArray = array(
    'project' => 'view',
    'project_task' => 'view',
    'project_milestones' => 'view',
    //... more module permissions
);

用户权限数组-还有一个包含每个模块的键/值数组。然后,它对当前登录的用户具有一个权限值,该用户的键名称与该模块的默认权限数组相同,该值将超过该用户在该特定模块上的默认权限。

代码语言:javascript
复制
// 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
);
EN

回答 1

Stack Overflow用户

发布于 2015-08-07 01:26:56

我想出了一个基本的解决办法。不过,我以前曾说过,PHP的array_merge()添加了重复匹配键作为子数组项。NOw我看到它实际上是有效的,所以发布我的解决方案,也许有一天会帮助到某人或者我自己。

我仍然对改进的想法持开放态度。

代码语言:javascript
复制
$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
);

结果

用户的权限与核心默认权限合并,并使用该部分的用户权限遍历模块.

当应用程序加载时,用户只对所有模块具有视图权限。运行此代码后,它们将获得两个模块的编辑权限.

代码语言:javascript
复制
Array
(
    [test] => view
    [project] => edit
    [project_task] => view
    [project_milestones] => edit
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31866355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档