【问题标题】:Codeigniter customized user roles open specific pages onlyCodeigniter 自定义用户角色仅打开特定页面
【发布时间】:2014-06-03 09:46:55
【问题描述】:

如何定义 CI 打开特定页面的用户权限? 我在考虑每次打开页面时调用数据库值,看看他是否有权打开特定页面。如果他没有权限它会出现,它会直接将您注销。但是会有很多页面要做。 我会创建一个函数并在每次打开页面时检查它。 这是最简单的方法吗?

谢谢。

【问题讨论】:

  • 您可以将USERS 角色存储在会话中,然后将角色传递给确定用户权限的函数。比每次您想检查他/她是否有权访问时访问数据库上的用户角色要好得多。
  • @tomexsans 好的,我得到了在会话中存储它的部分。页面呢?我要保存的数据是当前路径文件和权限名称。也是允许的用户级别。如何将数据库数据与会话中存储的用户角色关联起来?
  • 查看佐伊的回答。如果我已经有这么多页面来检查页面上的用户角色/权限,我会这样做
  • @tomexsans 我刚刚检查过了。谢谢!

标签: php codeigniter user-roles


【解决方案1】:

你在正确的轨道上。您可以在每次页面加载时查询数据库,这很好,如果值可能会更改,这是理想的选择。或者,您可以将权限数据保存到会话中,并在页面加载时查询会话(类似于检查用户是否已登录的方式)。

但是会有很多页面要做

您可以扩展默认 CI_Controller 并添加在每个页面上运行的您自己的代码。例如,在您的application/core/ 目录中创建一个名为MY_Controller.php 的新文件,并将您的权限检查代码放入__construct() 函数中,以便在每次页面加载时自动运行。

application/core/MY_Controller.php

class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        // Check privileges here. Something like..

        $this->load->helper('url');
        $this->load->model('privileges_model');

        $current_uri = uri_string(); 
            // If your url is something like http://some-site.com/blog/comments/123
            // this will return "/blog/comments/123"

        $user_id = $this->session->userdata('user_id');

        if($this->privileges_model->check($user_id, $current_uri) == FALSE)
        {
            // The user DOES NOT have the correct permissions.
            // Log them out, redirect them somewhere else, etc etc.
        }
    }
}

然后在您的控制器中,您可以扩展您的自定义MY_Controller,而不是扩展CI_Controller,将其方法继承到每个页面。

application/controllers/secret.php

class Secret extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    function index() 
    {
        // your secret page code here..
    }
}

Phil Sturgeon 的这篇文章更详细:http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

【讨论】:

  • 嗨@zoe是检查权限部分'声明当前用户角色'吗?如果我存储在我的数据库中,“当前路径文件、用户角色、权限名称和 ID”如何检查与数据库中的文件匹配的文件的当前路径?
  • @xyonme 我已经更新了我的答案,以展示您如何获取当前路径并将其发送到权限模型。特权模型是您查询数据库并返回结果(可能是 TRUE 或 FALSE)的地方,然后让用户继续,或者将他们踢出。
  • 非常感谢。我明白了! ;)
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 2019-03-25
  • 2021-02-02
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多