<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 知識點 1、后臺common控制器設置 2、權限設置 3、分離列表顯示和排序處理 4、后臺首頁權限判斷 5、分離配置列表和編輯 6、前臺首頁注冊登錄權限 7、自定義彈窗提示信息 8、獲取配置信息 [TOC] ## 一、后臺common控制器設置 ### (一)思路分析 首先,對common.php設置權限(登錄才能訪問) 其次,其它控制器必須繼承common.php ~~~ public function _initialize() { // 用戶未登錄則跳轉前臺登錄頁面 if(session('uid') == null){ session(null); $this->redirect('index/user/login'); } } ~~~ ### (二)相關代碼修改 #### 1、后臺控制器繼承common.php #### 2、common.php控制器delete函數修改 ~~~ public function _initialize() { // 用戶未登錄則跳轉前臺登錄頁面 if(session('uid') == null){ session(null); $this->redirect('index/user/login'); } } ~~~ #### 3、安全退出 ~~~ public function loginout(){ session(null); $this->redirect('index/user/login'); } ~~~ #### 4、模板里面輸出session變量 ~~~ {:session('username')} ~~~ ## 二、權限設置 ### (一)判斷是夠超級管理員 #### 1、配置文件 這里今后需要變動文件路徑 位置:\application\admin\config.php ~~~ return [ 'auth_superadmin' => '37', //Auth權限認證超管ID ]; ~~~ #### 2、引入文件 文件:common.php ~~~ use util\Auth; class Common extends Controller { public function _initialize() { // 用戶未登錄則跳轉前臺登錄頁面 if(session('uid') == null){ session(null); $this->redirect('index/user/login'); } // 判斷權限 if(!in_array(session('uid'), explode(',',config('auth_superadmin')))){ $auth = new Auth(); $rule = strtolower(request()->module().'/'.request()->controller().'/'.request()->action()); if(!$auth->check($rule, session('uid'))){ return error('您沒有相應操作權限!'); } } } } ~~~ 備注:TP5中_initialize()函數是不支持return方法的 ### (二)判斷權限函數 #### 1、引入類庫 use util\Auth; #### 2、設置權限 文件:\application\common.php ~~~ function checkAuth() { if(!in_array(session('uid'), explode(',',config('auth_superadmin')))){ $auth = new Auth(); $rule = strtolower(request()->module().'/'.request()->controller().'/'.request()->action()); return $auth->check($rule, session('uid')); }else{ return true; } } ~~~ #### 3、權限調用 ~~~ // 判斷權限 if(!checkAuth()){ return error('您沒有相應的操作權限!'); } ~~~ ## 三、分離列表顯示和排序處理 ### (一)原來代碼 ~~~ public function index($tab = 1, $id = 0){ // 1個分類(從表) 屬于 1個模型(主表) 屬于[belongsTo] // 1個模型 有 多個分類 if(request()->isPost()){ foreach (input('post.listorder/a') as $key => $value) { Db::name('menu')->where('id',$key)->update(['listorder'=>$value]); } return success('排序更新成功!',url('index',['tab'=>$tab])); }else{ $menuArray = MenuModel::order('listorder')->select(); foreach ($menuArray as $key => $value) { $menuList[] = $value->toArray(); //對象轉數組 } $tree = new Tree(); $tree->tree($menuList,'id','parentid','name'); $menu = $tree->getArray(); $this->assign('menu',$menu); // 編輯菜單,默認加載 if( 3 == $tab ){ // 獲取所要編輯菜單的信息 $info = Db::name('menu')->where('id',$id)->find(); if($info!=null && is_array($info)){ $this->assign('info',$info); } } } return view(); } ~~~ ### (二)現在代碼 #### 1、列表顯示 ~~~ public function index($tab = 1, $id = 0){ // 判斷權限 if(!checkAuth()){ echo "<script>parent.window.location.href='/admin/index/index';</script>"; exit; } $menuArray = MenuModel::order('listorder')->select(); foreach ($menuArray as $key => $value) { $menuList[] = $value->toArray(); //對象轉數組 } $tree = new Tree(); $tree->tree($menuList,'id','parentid','name'); $menu = $tree->getArray(); $this->assign('menu',$menu); // 編輯菜單,默認加載 if( 3 == $tab ){ // 獲取所要編輯菜單的信息 $info = Db::name('menu')->where('id',$id)->find(); if($info!=null && is_array($info)){ $this->assign('info',$info); } } return view(); } ~~~ #### 2、排序功能 ~~~ public function sort() { if(request()->isPost()){ // 判斷權限 if(!checkAuth()){ return error('您沒有相應的操作權限!'); } foreach (input('post.listorder/a') as $key => $value) { Db::name('menu')->where('id',$key)->update(['listorder'=>$value]); } return success('排序更新成功!',url('index',['tab'=>$tab])); } } ~~~ #### 3、模板修改 主要涉及排序模板提交處理地址,列表不存在修改 #### 4、權限調用 ~~~ if(!checkAuth()){ return error('您沒有相應的操作權限!'); } ~~~ #### 5、列表權限調用特別 ~~~ // 判斷權限 if(!checkAuth()){ echo "<script>parent.window.location.href='/admin/index/index';</script>"; exit; } ~~~ ## 四、后臺首頁權限判斷 ### (一)思路分析 標識:admin/index/index 思路:前臺登錄時判斷權限,即有沒有機會進入后臺首頁。 我個人認為,完全不必要這樣判斷,只需判斷該賬戶是不是指定管理員,是就進入后臺首頁,否則進入個人會員中心。 這個有個缺陷,就是管理員必須手動指定,缺乏靈活性。如果是正式CMS系統,還是按上面的思路進行權限判斷。 ### (二)具體實現 需要改動兩個地方 首先,修改超管配置文件 原來配置文件路徑是:\application\admin\config.php 這里只適合后臺調用該配置文件內容 ~~~ return [ 'auth_superadmin' => '37', //Auth權限認證超管ID ]; ~~~ 現在配置文件路徑:\application\config.php 這里配置文件的內容前后臺都可以調用 就是這個道理 其次,修改前臺登錄操作 原來代碼 ~~~ public function login(){ if(request()->isPost()){ $data = input('post.');//p($data);die; //判斷用戶名是否存在 //$map['username'] = $data['username']; //$user = Db::name('user')->where($map)->find(); //判斷用戶名或手機號是否存在 $user = Db::name('user')->where('username|mobile',$data['username'])->find(); if($user){ if($user['password'] == md5($data['password'])){ //寫入Session session('uid',$user['id']); session('username',$user['username']); // 臨時安全設置 $url = $user['username'] == 'manage' ? url('/manage') : url('/'); //返回成功信息 $data['status'] = 200; //$data['url'] = url('/manage'); $data['url'] = $url; return json($data); }else{ //返回錯誤信息 $data['status'] = 202; $data['msg'] = '登錄密碼錯誤!'; return json($data); } }else{ //返回錯誤信息 $data['status'] = 202; $data['msg'] = '用戶名不存在!'; return json($data); } }else{ return view('../application/index/view/default/user/login.html'); } } ~~~ 現在代碼 ~~~ public function login(){ if(request()->isPost()){ $data = input('post.'); //判斷用戶名或手機號是否存在 $user = Db::name('user')->where('username|mobile',$data['username'])->find(); if($user){ if($user['password'] == md5($data['password'])){ //寫入Session session('uid',$user['id']); // 判斷權限 if(!checkAuth()){ session(null); //返回錯誤信息 $data['status'] = 202; $data['msg'] = '您沒有權限登錄系統后臺!'; return json($data); }else{ //返回成功信息 $data['status'] = 200; $data['url'] = url('/admin'); return json($data); } }else{ //返回錯誤信息 $data['status'] = 202; $data['msg'] = '登錄密碼錯誤!'; return json($data); } }else{ //返回錯誤信息 $data['status'] = 202; $data['msg'] = '用戶不存在!'; return json($data); } }else{ return view('../application/index/view/default/user/login.html'); } } ~~~ 同樣,注冊時也需要進行權限判斷 還有,就是后臺凡是需要權限判斷的,都加相關代碼,無非兩種 第一,post提交的權限判斷,很簡單,代碼如下: ~~~ if(!checkAuth()){ return error('您沒有相應的操作權限!'); } ~~~ 第二,不是post提交權限判斷,即列表權限判斷 ~~~ if(!checkAuth()){ echo "<script>parent.window.location.href='/admin/index/index';</script>"; exit; } ~~~ ## 五、分離配置列表和編輯 原來代碼 ~~~ public function index($tab=1){ if(request()->isPost()){ // 判斷權限 if(!checkAuth()){ return error('您沒有相應的操作權限!'); } $config = new ConfigModel; if ($config->saveConfig(input('post.'))) { return success('配置更新成功',url('index',['tab'=>$tab])); }else{ return error('配置更新失敗',url('index',['tab'=>$tab])); } }else{ $config = ConfigModel::column('varname,value'); $this->assign('site',$config); return view(); } } ~~~ 現在代碼 ~~~ public function index() { $configList = ConfigModel::column('varname,value'); $this->assign('site',$configList); return view(); } public function edit($tab = "1") { if(request()->isPost()){ // 判斷權限 if(!checkAuth()){ return error('您沒有相應的操作權限!'); } $config = new ConfigModel; if($config->saveConfig(input('post.'))){ return success('配置更新成功!',url('index',['tab'=>$tab])); }else{ return error('配置更新失敗!',url('index',['tab'=>$tab])); } } } ~~~ ## 六、前臺首頁注冊登錄權限 ~~~ public function login(){ if(request()->isPost()){ $data = input('post.'); //判斷用戶名或手機號是否存在 $user = Db::name('user')->where('username|mobile',$data['username'])->find(); if($user){ if($user['password'] == md5($data['password'])){ //寫入Session session('uid',$user['id']); // 判斷權限 if(!in_array(session('uid'), explode(',',config('auth_superadmin')))){ $auth = new Auth(); $rule = 'manage/index/content'; if($auth->check($rule, session('uid'))){ //返回成功信息 $data['status'] = 200; $data['url'] = url('/manage'); return json($data); }else{ session(null); //返回錯誤信息 $data['status'] = 202; $data['msg'] = '您沒有權限登錄系統后臺!'; return json($data); } }else{ //返回成功信息 $data['status'] = 200; $data['url'] = url('/manage'); return json($data); } }else{ //返回錯誤信息 $data['status'] = 202; $data['msg'] = '登錄密碼錯誤!'; return json($data); } }else{ //返回錯誤信息 $data['status'] = 202; $data['msg'] = '用戶不存在!'; return json($data); } }else{ return view('../application/index/view/default/user/login.html'); } } ~~~ ## 七、自定義彈窗提示信息 之前事件響應是post方式的submit,現在如果是get方式如何實現自定義彈窗提示? ### (一)后臺處理 ~~~ public function content($id = 0) { if($id){ // 判斷權限 if(!checkAuth()){ $id = 0; echo "<script src='/static/admin/js/jquery.min.js?v=2.1.4'></script>". "<script>$(document).ready(function(){ layer.open({content: '您沒有相應的操作權限!',btn: ['確定'],icon: 2,shade: 0.1}); });</script>"; } $catname = getCatInfoById($id, 'catname'); $this->assign('catname',$catname); $this->assign('id',$id); } return view(); } ~~~ 判斷權限也可以換成 ~~~ // 判斷權限 if(!checkAuth()){ return $this->error('您沒有相應的操作權限!'); } ~~~ 備注:函數中是不能模板變量的 ### (二)模板 ~~~ "url": "{:url('getDataTables',['id'=>input('id')])}", 換成 "url": "{:url('getDataTables',['id'=>$id])}", <script> $(document).ready(function() { $("#dataTables-example").dataTable({ "serverSide": true, "ajax": { "url": "{:url('getDataTables',['id'=>$id])}", "data": function(d) { d.extra_search = "title|username"; } }, "ordering": false, //禁用全局排序 "order": [0, '`listorder` desc'], "lengthMenu": [5, 10, 20, 50, 100], // "dom": '<l <"#normalToos">f>t<ip>', "dom": "<'row'<'#normalToos.col-xs-4'><'col-xs-8'f>>" + "<'row'<'col-xs-12't>>" + "<'row'<'col-xs-6'li><'col-xs-6'p>>", "language": { "zeroRecords": "沒有檢索到數據", "lengthMenu": "每頁 _MENU_ 條記錄&nbsp;&nbsp;", "search": "搜索 ", "info": "共 _PAGES_ 頁,_TOTAL_ 條記錄,當前顯示 _START_ 到 _END_ 條", "paginate": { "previous": "上一頁", "next": "下一頁", } }, "columns": [{ render: function(data, type, row, meta) { return '<input type="checkbox" class="i-checks" name="ids[' + row.id + ']">'; } }, { data: "id" }, { data: "title" }, { data: "username" }, { data: "inputtime" }, { data: "views" }, { data: "operate" }, ], "drawCallback": function() { normal_init(); }, "initComplete": function() { $("#normalToos").append("<div class='m-b-xs'>" + "<div class='btn-group' id='exampleTableEventsToolbar' role='group'>" + "<a class='btn btn-sm btn-outline btn-default' title='添加' target='_parent' href='{:url('add',['id'=>input('id',0)])}'>" + "<i class='glyphicon glyphicon-plus' aria-hidden='true'></i></a>" + "<button type='submit' class='btn btn-sm btn-outline btn-default' title='刪除'>" + "<i class='glyphicon glyphicon-trash' aria-hidden='true'></i></button></div></div>"); } }); }); </script> ~~~ ## 八、獲取配置信息 ### 1、后臺處理 ~~~ public function _initialize() { // 用戶未登錄則跳轉前臺登錄頁面 if(session('uid') == null){ session(null); $this->redirect('index/user/login'); } // 獲取配置信息 if(!cache('config')){ $config = db('config')->column('varname,value'); cache('config',$config); } $this->assign('config',cache('config')); } ~~~ ### 2、模板調用 ~~~ <title>{$config.sitename} - 后臺主頁</title> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看