Auth.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace app\service\api;
  3. use laytp\traits\Error;
  4. use think\facade\Request;
  5. /**
  6. * Api权限服务实现者
  7. * Class Auth
  8. * @package app\api\service
  9. */
  10. class Auth
  11. {
  12. use Error;
  13. protected $_noNeedLogin = [];//无需登录的方法名数组
  14. /**
  15. * 设置无需登录的方法名数组
  16. * @param array $noNeedLogin
  17. */
  18. public function setNoNeedLogin($noNeedLogin = [])
  19. {
  20. $this->_noNeedLogin = $noNeedLogin;
  21. }
  22. /**
  23. * 获取无需登录的方法名数组
  24. * @return array
  25. */
  26. public function getNoNeedLogin()
  27. {
  28. return $this->_noNeedLogin;
  29. }
  30. /**
  31. * 当前节点是否需要登录
  32. * @param bool $noNeedLogin
  33. * @return bool true:需要登录,false:不需要登录
  34. */
  35. public function needLogin($noNeedLogin = false)
  36. {
  37. $noNeedLogin === false && $noNeedLogin = $this->getNoNeedLogin();
  38. $noNeedLogin = is_array($noNeedLogin) ? $noNeedLogin : explode(',', $noNeedLogin);
  39. //为空表示所有方法都需要登录,返回true
  40. if (!$noNeedLogin) {
  41. return true;
  42. }
  43. $noNeedLogin = array_map('strtolower', $noNeedLogin);
  44. $request = Request::instance();
  45. //判断当前请求的操作名是否存在于不需要登录的方法名数组中,如果存在,表明不需要登录,返回false
  46. if (in_array(strtolower($request->action()), $noNeedLogin) || in_array('*', $noNeedLogin)) {
  47. return false;
  48. }
  49. //默认为需要登录
  50. return true;
  51. }
  52. }