Module.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace backend\modules\admin;
  3. use backend\models\LoginApi;
  4. use backend\models\PermissionApi;
  5. use backend\models\MemberIdentity;
  6. use Yii;
  7. use yii\web\NotFoundHttpException;
  8. /**
  9. * admin module definition class
  10. */
  11. class Module extends \yii\base\Module
  12. {
  13. public $layout = 'main';
  14. /**
  15. * @inheritdoc
  16. */
  17. public $controllerNamespace = 'backend\modules\admin\controllers';
  18. /**
  19. * 访问控制的白名单,为小写的控制器名称
  20. * @var array
  21. */
  22. public $whiteList = ['druid', 'default'];
  23. /**
  24. * @inheritdoc
  25. */
  26. public function init()
  27. {
  28. parent::init();
  29. // custom initialization code goes here
  30. }
  31. public function beforeAction($action)
  32. {
  33. // 访问权限控制
  34. if (Yii::$app->user->id) {
  35. $permissionApi = new PermissionApi();
  36. $permissioin = $permissionApi->getPermission(Yii::$app->user->id)['data'];
  37. if (!$permissioin) {
  38. Yii::$app->params['allow_urls'] = [];
  39. echo $action->controller->renderPartial('/common/not_right');
  40. return false;
  41. }
  42. $urls = explode(',', trim($permissioin['url'], ','));
  43. Yii::$app->params['allow_urls'] = $urls;
  44. $controllerId = $action->controller->id;
  45. $url = '/admin/' . $controllerId;
  46. if (!in_array($url, $urls) && !in_array($controllerId, $this->whiteList)) {
  47. echo $action->controller->renderPartial('/common/not_right');
  48. return false;
  49. }
  50. }
  51. $id = !empty($_COOKIE[MemberIdentity::ADMIN_LOGIN_ID_COOKIE]) ? trim($_COOKIE[MemberIdentity::ADMIN_LOGIN_ID_COOKIE]) : '';
  52. $password = !empty($_COOKIE[MemberIdentity::ADMIN_LOGIN_TOKEN_COOKIE]) ? trim($_COOKIE[MemberIdentity::ADMIN_LOGIN_TOKEN_COOKIE]) : '';
  53. if ($id && $password) {
  54. $api = new LoginApi();
  55. $result = $api->loginByIdPassword($id, $password);
  56. if ($result['code'] == 1 && isset($result['data']['type']) && $result['data']['type'] == MemberIdentity::MEMBER_TYPE_ADMIN) {
  57. $identity = MemberIdentity::findIdentity($id);
  58. Yii::$app->getUser()->login($identity);
  59. }
  60. }
  61. if (Yii::$app->getUser()->getIsGuest()) {
  62. Yii::$app->response->redirect(Yii::$app->user->loginUrl);
  63. return false;
  64. }
  65. return parent::beforeAction($action);
  66. }
  67. }