【问题标题】:Way to design user permission check设计用户权限检查的方法
【发布时间】:2012-08-29 08:32:18
【问题描述】:

我是这个 codeigniter 的新手。我正在构建一个应用程序,其中用户角色扮演重要角色。在控制器中,我想检查用户是否具有特定的角色或权限,然后授予对功能的访问权限。我想知道我是否可以创建一个流程,这样我就不需要检查每个控制器的权限或角色,只有在扩展时才能做到这一点。我可以这样做吗?

/** 更新**/

如果我想为控制器中的每个方法或仅控制器中的某些方法设置权限,我该怎么做。

【问题讨论】:

    标签: codeigniter


    【解决方案1】:
        <?php
    class Secure_area extends CI_Controller 
    {
    
        function __construct($module_id=null)
        {
            parent::__construct();  
            $this->load->model('Employee');
            if(!$this->Employee->is_logged_in())
            {
                redirect('login');
            }
    
            if(!$this->Employee->has_permission($module_id,$this->Employee->get_logged_in_employee_info()->person_id))
            {
                redirect('no_access/'.$module_id);
            }
    
            //load up global data
            $logged_in_employee_info=$this->Employee->get_logged_in_employee_info();
            $data['allowed_modules']=$this->Module->get_allowed_modules($logged_in_employee_info->person_id);
            $data['user_info']=$logged_in_employee_info;
            $this->load->vars($data);
        }
    }
    ?>
    

    把你想做的每一件事都放在__construct....

    【讨论】:

    • 我们是否需要检查会话中的任何内容?
    • 我们这样做的原因是什么? $this->Employee->is_logged_in()(在 'Empployee' 模型中定义)将在 session 中查找 userdata('some variable') 并返回 'true' 或 'false'。
    【解决方案2】:

    您好,我开发了一个系统,我遇到了同样的问题...以下是我的问题的解决方案

    1. 一个存储所有控制器名称(或我的问题中的模块)的表。 例如模组1 模组2 模组3 . .
    2. 一张表,存储所有控制器的用户访问权限 例如 user1 mod1 0 用户 1 模式 2 1 用户1 mod3 1 . . 用户 2 模式 1 1 用户2 mod2 0 用户2 mod3 1

    3. 在检查 is_logged_in(){yes:has_permission(){yes:do things....continue, no:redirect(permission denied)} 的文件 (secure_area.php EXTENDS CI_Controller) 上创建,否:(重定向(登录))}

    4. 我所有的控制器都扩展了secure_area.php。

    5. 在管理区域中,您可以创建功能或表单,只需使用复选框即可授予用户权限。

    【讨论】:

    • 但是你在父类中检查权限。但是在父类中我不知道哪个控制器被称为 rite?
    • 但是子类正在扩展父类...也就是说父类中的代码是子类的一部分..基本上对于user1 ....www.example.com/index.php/mod1/ function/arg....将他重定向到权限被拒绝页面......但是 www.example.com/index.php/mod2/function/arg....将允许他访问
    • require_once ("secure_area.php"); mod1 扩展安全区域
    • 好的,我明白了。但是我如何确保在我调用函数时首先进行权限检查?
    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2018-06-20
    相关资源
    最近更新 更多