2
0

AccessTokenController.php 3.4 KB

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