赛亿官网

Base.php 4.5KB

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 = $this->makeMenu($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 makeMenu($rid)
  52. {
  53. var_dump($this->role_id);
  54. exit;
  55. if ($rid === 1) {
  56. $data = $this->sysMenuModel
  57. ->where('type!=2')
  58. ->field('id, pid, name, url, type, icon')
  59. ->select();
  60. } else {
  61. $sysRoleModel = new SysRoleModel();
  62. $permission_ids = $sysRoleModel->where('id', $rid)->value('permission');
  63. $data = $this->sysMenuModel
  64. ->where('type!=2')
  65. ->where('id', 'IN', $permission_ids)
  66. ->field('id, pid, name, url, icon')
  67. ->select();
  68. }
  69. return obj_tree($data);
  70. }
  71. /**
  72. * 权限检查
  73. */
  74. private function checkAuthor($rid)
  75. {
  76. if (!$rid) {
  77. return false;
  78. }
  79. if ($rid==1) {
  80. return true;
  81. }
  82. $c = strtolower(request()->controller());
  83. $a = strtolower(request()->action());
  84. if (preg_match('/^public_/', $a)) {
  85. return true;
  86. }
  87. if ($c == 'index' && $a == 'index') {
  88. return true;
  89. }
  90. $permission_ids = model('admin_role')->where('id', $rid)->value('permission');
  91. $permissions = $this->sysMenuModel->where('id', 'IN', $permission_ids)->field('id, pid, name, url')->select();
  92. dump($permissions);
  93. foreach ($permissions as $v) {
  94. if($v->url=='admin/'.$c.'/'.$a) {
  95. return true;
  96. }
  97. }
  98. return false;
  99. }
  100. /**
  101. * 记录日志
  102. */
  103. private function addLog()
  104. {
  105. $data = array();
  106. $data['querystring'] = request()->query()?'?'.request()->query():'';
  107. $data['m'] = request()->module();
  108. $data['c'] = request()->controller();
  109. $data['a'] = request()->action();
  110. $data['method'] = request()->method();
  111. $data['userid'] = $this->uid;
  112. $data['username'] = $this->username;
  113. $data['ip'] = request()->ip();
  114. $data['time'] = time();
  115. $arr = [];
  116. // $logLevel = 0;
  117. $logLevel = 1;
  118. // $logLevel = 2;
  119. switch ($logLevel) {
  120. case 2:
  121. $arr = array_merge($arr, ['SysUser/index','SysRole/index', 'SysMenu/index']);
  122. case 1:
  123. $arr = array_merge($arr, ['Category/index','Article/index', 'FileManager/index']);
  124. default:
  125. $arr = array_merge($arr, ['Index/index','SysLog/index','SysSet/index']);
  126. break;
  127. }
  128. // dump($arr);
  129. // dump(!in_array($data['c'].'/'.$data['a'], $arr));
  130. // exit;
  131. if (!in_array($data['c'].'/'.$data['a'], $arr)) {
  132. db('sys_log')->insert($data);
  133. }
  134. }
  135. }