【问题标题】:Access Control List to manage Database Column that are fetched用于管理获取的数据库列的访问控制列表
【发布时间】:2015-03-13 13:14:12
【问题描述】:

我有一个内置 codeigniter 的网站,为此我设计了一个访问控制列表来管理不同类型用户的权限。登录到站点的各种用户是:

  1. 超级管理员
  2. 管理员
  3. SEO 用户
  4. 开发者

现在我已经完成了对此的访问控制,并且可以通过超级管理员可访问的模块将添加、更新、列出和删除的权限分配给每个用户。

现在(这是客户新要求的一部分)我想让某些用户可以访问这些列,例如:

如果表 Products 有 4 列

Products : 
id   |  Products | Price | Status
-----+-----------+-------+----------
1    |  prod1    | 20.0  |   1 
2    |  prod2    | 35.6  |   0

现在我希望 SEO 用户的列价格在列表期间不显示。

注意:这只是一个示例,我需要将其设为动态,以便管理员控制谁有权访问哪一列。我不能简单地在我的视图文件中编写 If Else 逻辑来排除不需要的列。

请告诉我如何在不重新设计整个系统或进行重大更改的情况下做到这一点。

【问题讨论】:

    标签: php mysql codeigniter acl


    【解决方案1】:

    您可以使用ion_auth 库.. 非常简单的集成和管理用户和访问级别...

    【讨论】:

      【解决方案2】:

      这就是您使用 ACL 的原因。 ACLS 是一种存储权限的动态方式。我希望你有一个用户模型。在此模型中,您需要读取当前用户的 ACL。您为访问级别设置了一些常量,类似于 unix chmod。然后构建一个包含所有列和该列的 acl 值的数组。

      要构建查询,您可以使用

      之类的方法
      isSeo();
      

      hasAccess($tableName);
      

      当然,这是一个重大变化,但我不知道您希望如何实现 ACL,而不是更改您的代码。

      【讨论】:

      • 我已经拥有这些功能来检查任何特定表的用户类型权限。但是我现在正在尝试的是我想在该表的特定列上设置用户权限。
      • 然后我建议为该列添加一个参数:hasAccess($tableName, $column);
      【解决方案3】:

      可以尝试存储过程/函数或尝试使用这样的原始 SQL

      GRANT SELECT(id,Products,Status) ON Products TO 'SEO User'@'somehost';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        相关资源
        最近更新 更多