AccessTokenController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\AccessToken;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Str;
  6. use Firebase\JWT\JWT;
  7. use Firebase\JWT\Key;
  8. use Illuminate\Support\Facades\Log;
  9. use App\Http\Api\AuthApi;
  10. use App\Http\Api\ChannelApi;
  11. class AccessTokenController extends Controller
  12. {
  13. /**
  14. * Display a listing of the resource.
  15. *
  16. * @return \Illuminate\Http\Response
  17. */
  18. public function index()
  19. {
  20. //
  21. }
  22. /**
  23. * Store a newly created resource in storage.
  24. *
  25. * @param \Illuminate\Http\Request $request
  26. * @return \Illuminate\Http\Response
  27. */
  28. public function store(Request $request)
  29. {
  30. //
  31. $user = AuthApi::current($request);
  32. if (!$user) {
  33. Log::error('未登录');
  34. return $this->error(__('auth.failed'), [], 401);
  35. }
  36. $payload = $request->get('payload');
  37. $result = array();
  38. foreach ($payload as $key => $value) {
  39. //鉴权
  40. switch ($value['res_type']) {
  41. case 'channel':
  42. if (!isset($value['power']) || !isset($value['res_id'])) {
  43. continue 2;
  44. }
  45. if ($value['power'] === 'edit') {
  46. if (!ChannelApi::userCanEdit($user['user_uid'], $value['res_id'])) {
  47. continue 2;
  48. }
  49. } else {
  50. if (!ChannelApi::userCanRead($user['user_uid'], $value['res_id'])) {
  51. continue 2;
  52. }
  53. }
  54. break;
  55. default:
  56. continue;
  57. break;
  58. }
  59. //获取token
  60. $token = AccessToken::firstOrNew(
  61. [
  62. 'res_type' => $value['res_type'],
  63. 'res_id' => $value['res_id']
  64. ],
  65. [
  66. 'token' => (string)Str::uuid()
  67. ]
  68. );
  69. if (!$token->exists) {
  70. $token->save();
  71. }
  72. try {
  73. $jwt = JWT::encode($value, $token->token, 'HS512');
  74. } catch (\Exception $e) {
  75. Log::error('jwt', ['error' => $e]);
  76. continue;
  77. }
  78. $result[] = [
  79. 'payload' => $value,
  80. 'token' => $jwt
  81. ];
  82. }
  83. return $this->ok(['rows' => $result, 'count' => count($result)]);
  84. }
  85. /**
  86. * Display the specified resource.
  87. *
  88. * @param \App\Models\AccessToken $accessToken
  89. * @return \Illuminate\Http\Response
  90. */
  91. public function show(AccessToken $accessToken)
  92. {
  93. //
  94. }
  95. /**
  96. * Update the specified resource in storage.
  97. *
  98. * @param \Illuminate\Http\Request $request
  99. * @param \App\Models\AccessToken $accessToken
  100. * @return \Illuminate\Http\Response
  101. */
  102. public function update(Request $request, AccessToken $accessToken)
  103. {
  104. //
  105. }
  106. /**
  107. * Remove the specified resource from storage.
  108. *
  109. * @param \App\Models\AccessToken $accessToken
  110. * @return \Illuminate\Http\Response
  111. */
  112. public function destroy(AccessToken $accessToken)
  113. {
  114. //
  115. }
  116. }