【问题标题】:How to allow the right people to access this function?如何让合适的人访问此功能?
【发布时间】:2020-03-11 10:32:43
【问题描述】:

基本上每个用户都有一组基于其角色(管理员、经理、卖家等)的权限,并且他们都可以选择编辑他们的个人资料,但我希望管理员能够编辑每个人的个人资料。

编辑功能看起来像这样(我正在使用 Codeigniter)

function edit($id)
{
 if(!in_array('editUser'))
 {
   redirect('home');
 }
 //rest of the code...
}

首先想到的是检查尝试编辑页面的用户的会话 id 是否与正在编辑的用户的 id 相同,但这会使管理员无法编辑每个人的个人资料。

希望我今天能得到答复,谢谢您的帮助。

编辑

我通过添加另一个条件并反转它们来解决此问题:

function edit($id)
{
 if(in_array('editUser', $perms) || $this->session->userdata('id') == $id)
 {
  //rest of the code...
 }else{
  redirect('home');
 }
}

【问题讨论】:

  • 我也可以添加一个全新的功能,它会做同样的事情,但会被指定为 2 个不同的角色(管理员和所有其他角色),但我不喜欢这个想法
  • 你可以编写一个函数来检查试图编辑页面的用户的 id 是否与正在编辑的用户的 id 相同,或者当前用户的 ID 是否在管理员的角色。
  • 我试过 if(!in_array('editUser', $perms) || $this->session->userdata('id') != $id) 但没用

标签: php codeigniter permissions logic


【解决方案1】:

我通过添加另一个条件并反转它们来解决此问题:

function edit($id)
{
 if(in_array('editUser', $perms) || $this->session->userdata('id') == $id)
 {
  //rest of the code...
 }else{
  redirect('home');
 }
}

抱歉这个愚蠢的问题,但它已经困扰了我一段时间,我终于让它工作了!

【讨论】:

    【解决方案2】:

    用户登录时将角色存储在Session中并进行处理

    例如

        if($this->session->userdata('role') == 'admin'){
          // Show admin folder files 
        }elseif($this->session->userdata('role') == 'normal_user'){
        // Other user folder files 
       }
    

    Google 中有很多基于角色的库可用于 Codeigniter Commonly used library link

    【讨论】:

      【解决方案3】:

      您可以通过控制器以及查看页面进行控制

      通过这种方法

      https://stackoverflow.com/a/60634187/7817622

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-29
        • 1970-01-01
        • 2018-06-18
        相关资源
        最近更新 更多