用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4482|回复: 18
收起左侧

[Ajax] 获取函数值

[复制链接]
发表于 2018-8-6 20:34:39 | 显示全部楼层 |阅读模式
ajax如何获取辅助函数的值?
 楼主| 发表于 2018-8-7 20:30:21 | 显示全部楼层
本帖最后由 dzwlxk 于 2018-8-7 20:55 编辑
dzwlxk 发表于 2018-8-7 19:51
老大,通过ajax以json格式返回是指在辅助函数rbac_helper里?是这样吗?exit(json_encode($value)) ...

干脆我把代码贴出来:
hooks函数
public function auto_verify(){
                //目录
                $directory = substr($this->ci_obj->router->fetch_directory(),0,-1);
                //控制器
                $controller = $this->ci_obj->router->fetch_class();
                //方法
                $function = $this->ci_obj->router->fetch_method();
                //UURI(MD5)
                $this->ci_obj->uuri = md5($directory.$controller.$function);
               
                if($directory!=""){//当非主目录
                        if($this->ci_obj->config->item('rbac_auth_on')){//开启认证
                                if(!in_array($directory,$this->ci_obj->config->item('rbac_notauth_dirc'))){//需要验证的目录
                                        //验证是否登录
                                        if(!rbac_conf(array('INFO','id'))){
                                                $f=0;
                                                get_auth($f);
                                                die();
                                         }
                                        if($this->ci_obj->config->item('rbac_auth_type')==2){//若为实时认证
                                                $this->ci_obj->load->model("rbac_model");
                                                //检测用户状态
                                                $STATUS = $this->ci_obj->rbac_model->check_user_by_id(rbac_conf(array('INFO','id')));
                                                if($STATUS==FALSE){
                                                $f=0;
                                                get_auth($f);
                                                die();
                                                }
                                                //ACL重新赋权
                                                $this->ci_obj->rbac_model->get_acl(rbac_conf(array('INFO','role_id')));
                                        }
                                        //验证ACL权限
                                        if(!rbac_conf(array('ACL',$directory,$controller,$function))){
                                                $f=0;
                                                get_auth($f);
                                                die();
                                        }
                                        $f=1;
                                        get_rauth($f);
                                        die();
                                }
                        }
                        
                }
        }

rbac_help函数:
if (! function_exists ( "get_auth" )) {
        function get_auth($flag) {
                error_log($flag,3,"c:/errors.txt");
               
                exit(json_encode($flag));

        }
}

js文件;
我用的是H-ui前端框架
$(".Hui-aside").on("click",".menu_dropdown a",function(){
                var v=this;
                $.get("http://localhost/zkzdemo/manager/third_party/rbac/views/test.php",function(data){//这里的PHP是视图文件
                        if(data==1) {//如果为1,则打开页面
                                console.info(data);
                                Hui_admin_tab(v);
                        }        
                        else {//如果为0,则弹出无权限信息框
                                console.info(data);
                                alert("无权限");
                        }
                        
                });
        });
现在问题是如何取这个data值怎样从rbac_helper传到这个js文件?
 楼主| 发表于 2018-8-12 09:46:42 | 显示全部楼层
本帖最后由 dzwlxk 于 2018-8-12 09:47 编辑
Hex 发表于 2018-8-11 21:26
看了一下你的 get_auth 并没有什么实际作用啊?那你写这个 helper 的意义是什么?一般来说 helper 只用于视 ...

老大,我把我的思路给你汇报一下:
这个权限控制包是从论坛下的,它用hook判断权限,然后根据结果调用helper里的error_redirct做页面跳转。前端用的是H-ui,若没权限,它会把选项卡框架一并弹出。我准备改一下。在点击菜单时,若有权限则调用页面,没权限则只会弹出一个“无权限”的对话框,即阻止调用Hui_admin_tab(this)。
原码如下:

$(".Hui-aside").on("click",".menu_dropdown a",function(){
                var v=this;
                $.get("http://localhost/zkzdemo/index.php/adminman/get_power",function(data){
                        if(data==1){
                                console.info(data);
                                Hui_admin_tab(v);
                        }
                        else if(data==0)alert("无权限");
                });
});

data即为从后台获取的权限值,也可以说是从控制器拿到权限叛断值。不知道说清楚没有?
 楼主| 发表于 2018-8-9 21:15:49 | 显示全部楼层
Hex 发表于 2018-8-8 02:18
你要先写一个 CI 的控制器,然后在控制器里调用 helper,然后控制器返回一个 JSON 呀,这不才是正经的做法 ...

老大,现在已解决js通过JSON方式获取控制器方法中的数据。但在控制方法中调用辅助函数不知该如何传递变量?代码如下:
控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Adminman extends AdminController {
       
        function __construct(){
                parent::__construct();
                $this->load->helper(array('rbac','url'));
        }
         * 获取权限值
         */
        public function get_power(){
                $f=error_redirct();//这里参数该如何定义?
                echo(json_encode($f));
       }
}
辅助函数中error_redirct的定义:
if (! function_exists ( "error_redirct" )) {
        function error_redirct($power) {
                //error_log($power,3,"c:/errors.txt");
               
                return $power;
        }
请指教!
发表于 2018-8-6 23:07:48 | 显示全部楼层
说一下你的具体需求,才能给你一个合理的解决方案。
 楼主| 发表于 2018-8-7 11:46:36 | 显示全部楼层
老大,我用hook取得用户权限后,再把值传给帮助文件。而在页面中需调用该权限值以决定是否打开菜单或弹出无权限对话框。谢谢!
发表于 2018-8-7 14:54:10 | 显示全部楼层
dzwlxk 发表于 2018-8-7 11:46
老大,我用hook取得用户权限后,再把值传给帮助文件。而在页面中需调用该权限值以决定是否打开菜单或弹出无 ...

还是不太理解你要做什么?
 楼主| 发表于 2018-8-7 16:08:56 | 显示全部楼层
Hex 发表于 2018-8-7 14:54
还是不太理解你要做什么?

老大,首先用hook获取用户权限,有权限设为1,无权限设为0。然后把值传入帮助文件rbac_helper中
最后怎样在rbac_helper中怎样把值传给JS文件?
发表于 2018-8-7 17:29:00 | 显示全部楼层
dzwlxk 发表于 2018-8-7 16:08
老大,首先用hook获取用户权限,有权限设为1,无权限设为0。然后把值传入帮助文件rbac_helper中
最后怎样 ...

你把值输出到视图里,然后用 JS 获取呀,或者通过 AJAX 用 JSON 返回,只有这两个途径,没有其它途径。这个东西和 helper 无关,另外 helper 叫辅助函数,并不能叫做帮助文件。
 楼主| 发表于 2018-8-7 19:51:14 | 显示全部楼层
Hex 发表于 2018-8-7 17:29
你把值输出到视图里,然后用 JS 获取呀,或者通过 AJAX 用 JSON 返回,只有这两个途径,没有其它途径。这 ...

老大,通过ajax以json格式返回是指在辅助函数rbac_helper里?是这样吗?exit(json_encode($value))
发表于 2018-8-8 02:18:07 | 显示全部楼层
你要先写一个 CI 的控制器,然后在控制器里调用 helper,然后控制器返回一个 JSON 呀,这不才是正经的做法么?

本版积分规则