Manage.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2018 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 商户登录基础控制器
  7. */
  8. namespace app\common\controller;
  9. use app\common\model\SystemMemberMiniapp;
  10. use app\common\event\Passport;
  11. use app\system\event\AppConfig;
  12. class Manage extends Base {
  13. protected $user; //用户信息
  14. protected $member; //用户信息(兼容处理)
  15. protected $member_miniapp_id = 0; //应用ID
  16. protected $member_miniapp; //应用信息
  17. /**
  18. * 初始化类
  19. */
  20. protected function initialize(){
  21. parent::initialize();
  22. $this->user = self::isLogin(); //如果登录返回当前登录的用户信息
  23. $this->member = $this->user; //兼容处理
  24. //当前用户管理的应用
  25. if(Passport::getMiniapp()){
  26. $this->member_miniapp_id = Passport::getMiniapp()['member_miniapp_id'];
  27. $this->member_miniapp = SystemMemberMiniapp::where(['id' => $this->member_miniapp_id])->find();
  28. if(!$this->member_miniapp){
  29. Passport::clearMiniapp();
  30. }
  31. $this->isAppTyes($this->member_miniapp->miniapp->types);
  32. }
  33. self::isAuth(); //权限判断
  34. $assign['member_miniapp_id'] = $this->member_miniapp_id;
  35. $assign['member_miniapp'] = $this->member_miniapp;
  36. $assign['user'] = $this->user;
  37. $assign['member'] = $this->member; //兼容处理
  38. $this->assign($assign);
  39. }
  40. /**
  41. * 判断管理员是否登录
  42. * @access protected
  43. * @return boolean
  44. */
  45. protected function isLogin(){
  46. //不需要登录验证的页面
  47. $noLogin = ['system' =>['Passport.login'=>['index','reg','getpassword','logout','getregsms','getloginsms','cloud']]];
  48. //当前请求方法
  49. $module = $this->request->module();
  50. $controller = $this->request->controller();
  51. $action = $this->request->action();
  52. //如果当前访问是无需登录验证则直接返回
  53. if(isset($noLogin[$module])){
  54. if(isset($noLogin[$module][$controller]) && in_array($action,$noLogin[$module][$controller])){
  55. return true;
  56. }
  57. }
  58. $getUser = Passport::getUser();
  59. return $getUser ? $getUser : $this->redirect('system/passport.login/logout',302);
  60. }
  61. /**
  62. * 登录成功以后判断是否有访问权限
  63. * @access protected
  64. * @return boolean
  65. */
  66. protected function isAuth(){
  67. $module = $this->request->module();
  68. $controller = strtolower($this->request->controller());
  69. $action = $this->request->action();
  70. //判断是否系统应用\是否登录\是否创始人
  71. if($module == 'system' || !$this->member){
  72. return;
  73. }
  74. if(!$this->member_miniapp){
  75. $this->error('你未开通任何应用');
  76. }
  77. if($module != $this->member_miniapp->miniapp->miniapp_dir){
  78. $this->error('禁止跨应用管理,请先开通或切换管理应用。');
  79. }
  80. if($this->member->parent_id == 0 || $this->member->auth == 0){
  81. return;
  82. }
  83. $authconfig = AppConfig::auth($this->member_miniapp->miniapp->miniapp_dir);
  84. if(empty($authconfig)){
  85. return;
  86. }
  87. //权限判断
  88. foreach ($authconfig as $key => $value) {
  89. if($this->member->auth == $value['auth'] && isset($value['group'])){
  90. if(!isset($value['group'][$controller])){
  91. $this->error('你无权限访问当前功能,请联系创始人更改你的权限。');
  92. }
  93. if(!empty($value['group'][$controller]['action']) && !in_array($action,$value['group'][$controller]['action'])){
  94. $this->error('你无权限访问当前功能,请联系创始人更改你的权限。');
  95. }
  96. break;
  97. }
  98. }
  99. return;
  100. }
  101. }