Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于管理提取的数据库列的访问控制列表_Php_Mysql_Codeigniter_Acl - Fatal编程技术网

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

Php 用于管理提取的数据库列的访问控制列表,php,mysql,codeigniter,acl,Php,Mysql,Codeigniter,Acl,我有一个网站内置的codeigniter,我为它设计了一个访问控制列表来管理不同类型用户的权限。登录到站点的各种用户包括: 超级管理员 管理员 搜索引擎优化用户 显影剂 现在我已经完成了访问控制,添加、更新、列表和删除的权限可以通过超级管理员可以访问的模块分配给每个用户 现在(这是客户新要求的一部分),我想让某些用户可以访问这些列,例如: 如果表Products有4列 Products : id | Products | Price | Status -----+-----------+

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

  • 超级管理员
  • 管理员
  • 搜索引擎优化用户
  • 显影剂
  • 现在我已经完成了访问控制,添加、更新、列表和删除的权限可以通过超级管理员可以访问的模块分配给每个用户

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

    如果表Products有4列

    Products : 
    id   |  Products | Price | Status
    -----+-----------+-------+----------
    1    |  prod1    | 20.0  |   1 
    2    |  prod2    | 35.6  |   0
    
    现在我想说的是,对于SEO用户来说,价格栏在上市期间不会显示出来

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


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

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

    要构建查询,可以使用以下方法

    isSeo();
    


    当然这是一个重大的改变,但我不知道在不改变代码的情况下,您希望如何实现ACL

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

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

    你可以使用图书馆。。集成和管理用户和访问级别非常简单…

    我已经有了这些功能来检查任何特定表的用户类型权限。但是我现在正在尝试的是,我想在该表的特定列上设置用户权限。然后我建议为该列添加一个参数:hasAccess($tableName,$column);
    GRANT SELECT(id,Products,Status) ON Products TO 'SEO User'@'somehost';