0

我正在使用 CodeIgniter 框架开发电子商务网站。因此,我希望所有访问者都可以访问网站的一部分,而只有管理员可以访问部分网站。

我已将我的登录和会话功能委托给“application/libraries/BaseController.php”(然后由需要使用这些功能的任何控制器扩展)。

问题是该站点不区分以客户身份登录的访问者和以管理员身份登录的访问者,因此管理部分对所有人都是不可见的。

基本控制器中的 isAdmin() 函数通过检查数据库中的 isAdmin 列是否等于 1(对于所有其他用户,这是 0)来检查用户是否是管理员

public function isAdmin(){
    if($this->isAdminBool == 1){ 
        return true;
    } else{
        return false;
    }

}

到目前为止,这是可行的——当我回显用户的姓名、电子邮件以及他们的 isAdmin 列中包含的值时,所有这些都按预期显示。

但是,当我尝试使用 isAdmin() 函数隐藏网站的敏感部分(例如,application/controllers/Upload.php)时,该网站不会区分状态为“客户端”的用户(isAdmin ==0) 或“管理员”(isAdmin ==1)

类上传扩展 BaseController {

public function __construct()
{
    parent::__construct();
    $this->load->helper(array('form', 'url'));
    $this->isLoggedIn();

}

public function index()
{
    if($this->isAdmin() == TRUE) {  

        $this->load->view('upload_form', array('error' => ' '));

    } else{


        echo "I'm sorry, you do not have permission to view the secret upload part of the website";


    }
}

我尝试了许多不同的组合

if($this->isAdmin() != TRUE)

if($this->isAdmin() != FALSE)

等等,但我无法获得扩展 BaseController 的控制器来区分以客户端身份登录的用户和以管理员身份登录的用户。我确定有一些非常基本的错误,但我真的被卡住了。

我已将框架和数据库上传到https://github.com/Cathall/Codeigniter-MVC---isAdmin-functoin-not-working

我创建了一个客户端

测试@test.org | 密码:12345678

和一位管理员

admin1@gite.com | 密码:12345678910

如果有人可以就此给我任何建议,我将不胜感激 - 当他们几乎都实现此功能时,很难继续使用网站的其他部分:/

4

1 回答 1

0

经过多次尝试修复它,我决定摆脱 isAdmin() 函数,只使用:

if($this->session->role==='admin') {  

            $this->load->view('upload_form', array('error' => ' '));

- 在需要的每个控制器的顶部

稍微不那么优雅,但它可以工作¯_(ツ)_/¯

于 2019-08-15T18:00:17.133 回答