显示目录
DSO2O帮助手册 DSO2O技术手册 DSO2O开发手册

管理员

管理员可以设置平台的基本信息、审核店铺入驻信息、审核商品上架、控制平台的一些营销功能的开启状态、设置线上支付的收款账号、调解售后纠纷、审核店铺结算单、查看各类统计信息、配置微信公众号、更新系统缓存等。

首先管理员从后台登录入口/admin/login/index进行登录操作,根据传入的用户名以及MD5加密后的密码,从数据表admin中对应的管理员数据。登录成功后,更新管理员的登录次数和登录时间信息,并设置管理员session信息。

                //更新 admin 最新信息
                $update_info = array(
                    'admin_login_num' => ($admin_info['admin_login_num'] + 1),
                    'admin_login_time' => TIMESTAMP
                );
                $admin_mod->editAdmin($update_info, $admin_info['admin_id']);
 
                //设置 session
                session('admin_id', $admin_info['admin_id']);
                session('admin_name', $admin_info['admin_name']);
                session('admin_gid', $admin_info['admin_gid']);
                session('admin_is_super', $admin_info['admin_is_super']);

管理员所有的业务模块均继承自基类\application\admin\controller\AdminControl.php,每当管理员控制器在初始化的时候,都会进行三步主要操作:

1. 从缓存中取出配置信息,并赋值到ThinkPHP的全局配置参数中,因为后台对配置表config的读取会比较频繁,这样操作会比较方便。

2. 如果管理员不是超级管理员(admin_id为1),则检查该管理员是否有操作该控制器的权限。

3. 设置菜单。

        $this->admin_info = $this->systemLogin();
        $config_list = rkcache('config', true);
        config($config_list);

        
        //引用语言包的类型 针对于数据库读写类型 中文\英文
        if (in_array(cookie('ds_admin_sql_lang'), array('zh-cn', 'en-us'))) {
            config('default_sql_lang', cookie('ds_admin_sql_lang'));
        }else{
            config('default_sql_lang', 'zh-cn');
        }
        
        if ($this->admin_info['admin_id'] != 1) {
            // 验证权限
            $this->checkPermission();
        }
        $this->setMenuList();

\application\admin\controller\AdminControl.php中的limitList方法保存所有权限列表。

        $_limit = array(
            array('name' => lang('ds_setting'), 'child' => array(
                    array('name' => lang('ds_base'), 'action' => null, 'controller' => 'Config'),
                    array('name' => lang('ds_account'), 'action' => null, 'controller' => 'Account'),
                    array('name' => lang('ds_upload_set'), 'action' => null, 'controller' => 'Upload'),
                    array('name' => lang('ds_seo_set'), 'action' => null, 'controller' => 'Seo'),
                    array('name' => lang('ds_payment'), 'action' => null, 'controller' => 'Payment'),
                    array('name' => lang('ds_message'), 'action' => null, 'controller' => 'Message'),
                    array('name' => lang('ds_express'), 'action' => null, 'controller' => 'Express'),
                    array('name' => lang('ds_waybill'), 'action' => null, 'controller' => 'Waybill'),
                    array('name' => lang('ds_region'), 'action' => null, 'controller' => 'Region'),
                    array('name' => lang('ds_offpayarea'), 'action' => null, 'controller' => 'Offpayarea'),
                    array('name' => lang('ds_adminlog'), 'action' => null, 'controller' => 'Adminlog'),
                )),
            ……

从管理员的权限组表gadmin中获取当前管理员所属的权限组,其中glimits为使用公共方法ds_encrypt将含有controlleractionmd5加密后权限名称进行加密的字符。将glimits用公共方法ds_decrypt解密后,根据比较当前控制器和操作是否在所属权限组中,如果不存在则隐藏相应的菜单。菜单在\application\admin\controller\AdminControl.php中的menuList进行声明。

            'dashboard' => array(
                'name' => 'dashboard',
                'text' => lang('ds_dashboard'),
                'children' => array(
                    'welcome' => array(
                        'ico'=>"",
                        'text' => lang('ds_welcome'),
                        'args' => 'welcome,Dashboard,dashboard',
                    ),
               ……

对于一些重要的操作,可以使用AdminControl类中的log方法将操作信息记录到adminlog表中,以便日后审查。