赛亿官网

Base.php 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace app\admin\controller;
  3. use think\Controller;
  4. use think\Request;
  5. use app\admin\model\SysMenu as SysMenuModel;
  6. use app\admin\model\SysRole as SysRoleModel;
  7. class Base extends Controller
  8. {
  9. protected $uid;
  10. protected $username;
  11. protected $role_id;
  12. private $sysMenuModel;
  13. public function __construct(Request $request = null)
  14. {
  15. parent::__construct($request);
  16. //判断是否登陆
  17. if (!session('uid') && !session('username') ) {
  18. $this->error('您还没有登录, 请登录', '/admin/login');
  19. }
  20. $this->sysMenuModel = new SysMenuModel();
  21. // 登录用户信息
  22. $this->uid = session('uid');
  23. $this->username = session('username');
  24. $this->role_id = session('role_id');
  25. // //权限检查
  26. if (!$this->checkAuthor($this->role_id)) {
  27. $this->error('你无权限操作');
  28. }
  29. //记录日志
  30. $this->addLog();
  31. //菜单数据
  32. $data_menu = obj_tree($this->getMenu($this->role_id));
  33. //当前活动菜单父id
  34. $controller = $request->controller();
  35. $menu_url = strtolower('admin/'.preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $controller)).'/index';
  36. $active_pid = $this->sysMenuModel->where('url', $menu_url)->value('pid');
  37. // var_dump($active_pid);
  38. // exit;
  39. //当前控制器及方法(转小写)
  40. $controller = strtolower($controller);
  41. $action = strtolower($request->action());
  42. // 模板输出
  43. $this->assign('data_menu', $data_menu);
  44. $this->assign('active_pid', $active_pid);
  45. $this->assign('controller', $controller);
  46. $this->assign('action', $action);
  47. }
  48. /**
  49. * 目录获取
  50. */
  51. private function getMenu($rid)
  52. {
  53. if ($rid === 1) {
  54. $data = $this->sysMenuModel
  55. ->where('type!=2')
  56. ->field('id, pid, name, url, type, icon')
  57. ->select();
  58. } else {
  59. $sysRoleModel = new SysRoleModel();
  60. $permission_ids = $sysRoleModel->where('id', $rid)->value('permissions');
  61. $data = $this->sysMenuModel
  62. ->where('type!=2')
  63. ->where('id', 'IN', $permission_ids)
  64. ->field('id, pid, name, url, icon')
  65. ->select();
  66. }
  67. return $data;
  68. }
  69. /**
  70. * 权限检查
  71. */
  72. private function checkAuthor($rid)
  73. {
  74. if (!$rid) {
  75. return false;
  76. }
  77. if ($rid==1) {
  78. return true;
  79. }
  80. $c = strtolower(request()->controller());
  81. $a = strtolower(request()->action());
  82. if (preg_match('/^public_/', $a)) {
  83. return true;
  84. }
  85. if ($c == 'index' && $a == 'index') {
  86. return true;
  87. }
  88. $permission_ids = $this->getMenu($rid);
  89. $permissions = $this->sysMenuModel->where('id', 'IN', $permission_ids)->field('id, pid, name, url')->select();
  90. // dump($permissions);
  91. foreach ($permissions as $v) {
  92. if($v->url=='admin/'.$c.'/'.$a) {
  93. return true;
  94. }
  95. }
  96. return false;
  97. }
  98. /**
  99. * 记录日志
  100. */
  101. private function addLog()
  102. {
  103. $data = array();
  104. $data['querystring'] = request()->query()?'?'.request()->query():'';
  105. $data['m'] = request()->module();
  106. $data['c'] = request()->controller();
  107. $data['a'] = request()->action();
  108. $data['method'] = request()->method();
  109. $data['userid'] = $this->uid;
  110. $data['username'] = $this->username;
  111. $data['ip'] = request()->ip();
  112. $data['time'] = time();
  113. $arr = [];
  114. // $logLevel = 0;
  115. $logLevel = 1;
  116. // $logLevel = 2;
  117. switch ($logLevel) {
  118. case 2:
  119. $arr = array_merge($arr, ['SysUser/index','SysRole/index', 'SysMenu/index']);
  120. case 1:
  121. $arr = array_merge($arr, ['Category/index','Article/index', 'FileManager/index']);
  122. default:
  123. $arr = array_merge($arr, ['Index/index','SysLog/index','SysSet/index']);
  124. break;
  125. }
  126. // dump($arr);
  127. // dump(!in_array($data['c'].'/'.$data['a'], $arr));
  128. // exit;
  129. if (!in_array($data['c'].'/'.$data['a'], $arr)) {
  130. db('sys_log')->insert($data);
  131. }
  132. }
  133. }