BaseController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. declare(strict_types=1);
  3. namespace Modules\Manage\Controllers;
  4. use App\Controller\CoreController;
  5. use App\Model\ManagerModel;
  6. use App\Repositories\ManagerLogRepository;
  7. use Hyperf\Utils\Context;
  8. use Modules\Manage\Services\AuthService;
  9. class BaseController extends CoreController
  10. {
  11. /**
  12. * 当前管理员ID.
  13. *
  14. * @var string
  15. */
  16. protected $ctManagerId = 'ct:Manage.BaseController.manager_id';
  17. /**
  18. * 当前管理员信息.
  19. *
  20. * @var string
  21. */
  22. protected $ctMnanagerInfo = 'ct:Manage.BaseController.manager_info';
  23. /**
  24. * 当前管理员角色.
  25. *
  26. * @var string
  27. */
  28. protected $ctRoleId = 'ct:Manage.BaseController.role_id';
  29. /**
  30. * 属性描述.
  31. *
  32. * @var ManagerLogRepository
  33. */
  34. protected $logRepo = null;
  35. public function __construct()
  36. {
  37. // 初始化获取jwt管理员信息.
  38. $this->initJwtManager();
  39. }
  40. /**
  41. * 初始化获取jwt管理员信息.
  42. * @return void
  43. */
  44. protected function initJwtManager()
  45. {
  46. $managerInfo = $this->getCurrentManagerInfo();
  47. if (!empty($managerInfo)) {
  48. Context::set($this->ctMnanagerInfo, $managerInfo);
  49. Context::set($this->ctManagerId, $managerInfo['manager_id']);
  50. Context::set($this->ctRoleId, $managerInfo['role_id']);
  51. }
  52. }
  53. /**
  54. * 记录操作日志.
  55. * @param string $subject 主题.
  56. * @param string $svalue 关联数据.
  57. * @param array $dbData 此数组数据结构一定要是["after_items" => [0, 1, 2], "before_items" => [0, 1, 2]], after_items,before_items 是一个二维码数组.
  58. * @return bool
  59. */
  60. protected function log(string $subject, $svalue = '', $dbData = [])
  61. {
  62. $manager = $this->getCurrentManger();
  63. list($module, $action) = $this->getModuleAndAction();
  64. $inputs = [
  65. 'manager_id' => !empty($manager->manager_id) ? (string)$manager->manager_id : '',
  66. 'username' => '',
  67. 'nick' => '',
  68. 'subject' => mb_strcut((string)$subject, 0, 700),
  69. 'module' => $module,
  70. 'action' => $action,
  71. 'svalue' => !empty($svalue) ? mb_strcut((string)$svalue, 0, 700) : '',
  72. 'db_data' => $dbData,
  73. ];
  74. if (!empty($manager)) {
  75. $inputs['username'] = $manager->username;
  76. $inputs['nick'] = $manager->nick;
  77. }
  78. $this->getLogRepo()->createOne($inputs);
  79. return true;
  80. }
  81. /**
  82. * 获取日志仓库.
  83. * @return ManagerLogRepository|null
  84. */
  85. protected function getLogRepo()
  86. {
  87. return make(ManagerLogRepository::class);
  88. }
  89. /**
  90. * 获取当前管理员对象信息.
  91. * @return \Hyperf\Database\Model\Builder|\Hyperf\Database\Model\Model|object|null
  92. */
  93. protected function getCurrentManger()
  94. {
  95. $managerInfo = $this->getCurrentManagerInfo();
  96. return ManagerModel::with(['role'])->where('manager_id', $managerInfo['manager_id'])->first();
  97. }
  98. /**
  99. * 获取当前管理员信息.
  100. * @return array
  101. */
  102. protected function getCurrentManagerInfo()
  103. {
  104. $managerInfo = Context::get($this->ctMnanagerInfo, []);
  105. if (empty($managerInfo)) {
  106. $authService = new AuthService();
  107. $managerInfo = $authService->getManagerInfo();
  108. }
  109. return $managerInfo;
  110. }
  111. }