AccessTokenController.php 3.2 KB

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