【问题标题】:Field-level ACL in CodeIgniterCodeIgniter 中的字段级 ACL
【发布时间】:2012-09-03 14:40:06
【问题描述】:

我搜索了 SO,搜索了 ACL、CodeIgniter、基于角色等的所有组合,并找到了许多用于控制对控制器和方法的访问的好产品,但对于提供字段级控制的东西却一无所获。

我下载了几个(phpgacl 和 zend acl),看看是否可以轻松修改它们以满足我对字段级权限的需求。所以在我花时间从头开始创建一个之前...

问题:是否存在允许基于用户登录的字段级限制的库和/或最佳实践?

具体来说,我希望根据用户的 AD 组成员身份,拥有表单字段:

  • 不出现
  • 出现但只读
  • 可编辑

顺便说一句,AD 组成员资格已经在会话变量中可用,所以我不一定需要那个位。我已将其标记为 ACL 和基于角色的两种方式,不是为了再次讨论差异,而是因为如果包满足我的需求,我愿意采用任何一种方式。

【问题讨论】:

  • 我看到有几票要结束了。您能否让我知道为什么“非建设性”投票以及我该如何纠正?我检查了“如何提问”并做了功课,试图具体一点,我认为这会与其他人相关(我不能是唯一一个在寻找这个的人,可以吗?),我特别试图抢占“辩论、争论、投票或扩展讨论”。请让我知道我可以做些什么来改善这个问题。
  • 到目前为止,我还没有遇到任何提供字段级 ACL 的公开可用的 CI 库。您可能必须结合使用 ACL 和内置表单验证库的扩展来实现您的需要。
  • @Brendan 感谢您的确认。如果没有其他人有什么东西,那就是我接下来要去的地方。只是没有在知识体系中看到任何东西。如果我最终创造了一些东西,我会发布它以供使用。
  • @Brendan 那么,你最终构建了任何可以分享的东西吗?
  • @Fr0zenFyr 几年前我切换到了 Laravel。建议你也这样做。 Eloquent > CI 模型。

标签: php codeigniter acl access-control role-base-authorization


【解决方案1】:

好吧,我来回答您的一个问题,如果您愿意的话,我目前正在使用“基于标志”的 ACL。在我的用户表中,我有 3 个字段,分别称为已激活、员工、管理员。我在 2 个不同的模型中运行 3 个查询来检查是否提供了登录凭据

WHERE staffmember = 1
WHERE Admin = 1
WHERE activated = 1

如果返回记录,我会将其转换为返回值。

这是我的 if else 语句来决定谁看到了什么:

    function index()
{
    $this->load->model('staff_model'); // loads model that queries if username is associated with a admin or staff account
    if($staffmember = $this->staff_model->staffmember()) //Checks for staff value == 1 
    {
        if($is_admin = $this->staff_model->is_admin()) // Checks for admin value == 1
        {
            redirect('admin_controller/index'); // redirects to what the admin will see (the admin pages, add users, delete users, deactivate users, this way I set up a sorta CMS type system
        }else{ // If not admin == 1 meaning it can be a staff member == 1 
            $data['main_content'] = 'staff_homepage_view'; //sets up template for staff member
            $this->load->view('includes/template', $data); // this will then load the view for staff member
        }
    }else{ // If not staff == 1 // then if it is not staff member it will load the view for a no permission account in this case : student 
        $data1['main_content'] = 'student_homepage_view';
        $this->load->view('includes/template', $data1); 
        }
    }

如果您需要查看模型,请告诉我。但通过这种方式,我能够设置用户可以通过数据库中的帐户标志看到的内容。

这样,admin,也必须是staff,这样激活的无权限账号就不能是staff或者admin。

那么你可以做的就是在你的用户表中设置一个名为编辑的字段

然后您可以在控制器中指定如果 Edit = 1 则用户对需要完成的操作具有完全访问权限,否则只能读取。现在我不知道你要编辑什么,所以我能提供给你的信息有点有限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多