AccessTokenController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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\Services\AuthService;
  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 = AuthService::current($request);
  32. if (!$user) {
  33. return $this->error(__('auth.failed'), [], 401);
  34. }
  35. $payload = $request->input('payload');
  36. $result = array();
  37. foreach ($payload as $key => $value) {
  38. //鉴权
  39. switch ($value['res_type']) {
  40. case 'channel':
  41. if (!isset($value['power']) || !isset($value['res_id'])) {
  42. continue 2;
  43. }
  44. if ($value['power'] === 'edit') {
  45. if (!ChannelApi::userCanEdit($user['user_uid'], $value['res_id'])) {
  46. continue 2;
  47. }
  48. } else {
  49. if (!ChannelApi::userCanRead($user['user_uid'], $value['res_id'])) {
  50. continue 2;
  51. }
  52. }
  53. break;
  54. default:
  55. continue 2;
  56. break;
  57. }
  58. //获取token
  59. $token = AccessToken::firstOrNew(
  60. [
  61. 'res_type' => $value['res_type'],
  62. 'res_id' => $value['res_id']
  63. ],
  64. [
  65. 'token' => (string)Str::uuid()
  66. ]
  67. );
  68. if (!$token->exists) {
  69. $token->save();
  70. }
  71. try {
  72. $jwt = JWT::encode($value, $token->token . $token->token, 'HS512');
  73. } catch (\Exception $e) {
  74. Log::error('jwt', ['error' => $e]);
  75. continue;
  76. }
  77. $result[] = [
  78. 'payload' => $value,
  79. 'token' => $jwt
  80. ];
  81. }
  82. return $this->ok(['rows' => $result, 'count' => count($result)]);
  83. }
  84. /**
  85. * Display the specified resource.
  86. *
  87. * @param \App\Models\AccessToken $accessToken
  88. * @return \Illuminate\Http\Response
  89. */
  90. public function show(AccessToken $accessToken)
  91. {
  92. //
  93. }
  94. /**
  95. * Update the specified resource in storage.
  96. *
  97. * @param \Illuminate\Http\Request $request
  98. * @param \App\Models\AccessToken $accessToken
  99. * @return \Illuminate\Http\Response
  100. */
  101. public function update(Request $request, AccessToken $accessToken)
  102. {
  103. //
  104. }
  105. /**
  106. * Remove the specified resource from storage.
  107. *
  108. * @param \App\Models\AccessToken $accessToken
  109. * @return \Illuminate\Http\Response
  110. */
  111. public function destroy(AccessToken $accessToken)
  112. {
  113. //
  114. }
  115. }