访问控制列表,用于管理提取的数据库列

时间:2015-01-15 07:19:01

标签: php mysql codeigniter acl

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

  1. 超级管理员
  2. 管理
  3. SEO用户
  4. 开发
  5. 现在我已经为此完成了访问控制,并且可以通过Super Admin可访问的模块为每个用户分配添加,更新,列表和删除权限。

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

    如果表格产品有4列

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

    现在我希望SEO用户列价在列表中不显示。

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

    请告诉我如何在不重新设计整个系统或进行重大更改的情况下完成此操作。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

要构建查询,您可以使用

等方法
isSeo();

hasAccess($tableName);

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

答案 2 :(得分:0)

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

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