我有一个内置代码点火器的网站,我为它设计了一个访问控制列表来管理不同类型用户的权限。登录站点的各种用户是:
- 超级管理员
- 管理
- 搜索引擎优化用户
- 开发 人员
现在我已经完成了对此的访问控制,并且可以通过超级管理员可访问的模块将添加,更新,列出和删除的权限分配给每个用户。
现在(这是客户新要求的一部分)我想让某些用户可以访问这些列,例如:
如果表产品有 4 列
Products :
id | Products | Price | Status
-----+-----------+-------+----------
1 | prod1 | 20.0 | 1
2 | prod2 | 35.6 | 0
现在我希望对于SEO用户,列价格在列表期间不会出现。
注意:这只是一个例子,我需要将其动态化,以便管理员控制谁有权访问哪列。我不能简单地在我的视图文件中编写 If Else 逻辑来排除不需要的列。
请告诉我如何在不重新设计整个系统或进行重大更改的情况下做到这一点。
ion_auth库..非常简单地集成和管理用户和访问级别...
这就是使用 ACL 的原因。ACLS 是一种存储权限的动态方式。我希望你有一个用户模型。在此模型中,您需要读取当前用户的 ACL。您可以为访问级别设置一些常量,类似于Unix chmod。然后,生成一个包含所有列和此列的 ACL 值的数组。
若要生成查询,可以使用以下方法:
isSeo();
或
hasAccess($tableName);
当然,这是一个重大变化,但我不知道您希望如何实现更改代码的 ACL。
可以尝试存储过程/函数或尝试使用这样的原始 SQL
GRANT SELECT(id,Products,Status) ON Products TO 'SEO User'@'somehost';