You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LuticateMiddleware.php 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: robin
  5. * Date: 10/19/15
  6. * Time: 9:14 PM
  7. */
  8. namespace Luticate\Auth\Business;
  9. use Closure;
  10. use Illuminate\Http\Request;
  11. use Luticate\Auth\DBO\LuticatePermissions;
  12. use Luticate\Auth\DBO\LuticateUsersDbo;
  13. use Luticate\Utils\LuBusiness;
  14. use Luticate\Utils\LuController;
  15. class LuticateMiddleware
  16. {
  17. const TOKEN_HEADER = "X-Authorization";
  18. /**
  19. * @param $request Request
  20. * @param Closure $next
  21. * @param ...$permissions
  22. * @return null|string
  23. */
  24. public function handle($request, Closure $next, ...$permissions)
  25. {
  26. /**
  27. * @var $user LuticateUsersDbo
  28. */
  29. $user = null;
  30. $token = $request->header(self::TOKEN_HEADER);
  31. if ($token != null && $token != "") {
  32. $data = JwtHelper::decode($token);
  33. if ($data != null) {
  34. $user_id = $data[LuticateUsersBusiness::KEY_USER_ID];
  35. $salt = $data[LuticateUsersBusiness::KEY_SALT];
  36. $user = LuticateUsersBusiness::getById($user_id);
  37. if ($user->getSalt() != $salt) {
  38. $user = null;
  39. }
  40. }
  41. }
  42. if (is_null($user)) {
  43. if ($token != null && $token != "") {
  44. abort(401, "Invalid token");
  45. }
  46. $user = LuticateUsersBusiness::getById(0);
  47. }
  48. LuticateBusiness::setCurrentUser($user);
  49. LuBusiness::$parameters["_user"] = $user;
  50. $permissions[] = LuticatePermissions::USER_LOGIN;
  51. foreach ($permissions as $permission) {
  52. try {
  53. $perm = LuticatePermissionsBusiness::getEffectivePermission($user->getId(), $permission);
  54. if (!$perm->getValue()) {
  55. abort(401, "Permission denied");
  56. }
  57. } catch (\Exception $e)
  58. {
  59. abort(401, "Permission denied");
  60. }
  61. }
  62. return $next($request);
  63. }
  64. }