Multitenancy.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace Encore\Admin\Multitenancy;
  3. use Encore\Admin\Controllers\AuthController;
  4. use Encore\Admin\Extension;
  5. use Illuminate\Support\Arr;
  6. class Multitenancy extends Extension
  7. {
  8. /**
  9. * @var string
  10. */
  11. public $name = 'multitenancy';
  12. /**
  13. * @var string
  14. */
  15. protected static $middleware = '';
  16. /**
  17. * Register a laravel-admin tenancy.
  18. *
  19. * @param string $name
  20. * @param array $config
  21. */
  22. public static function register($name, array $config)
  23. {
  24. static::$middleware = "multitenancy:$name";
  25. static::registerAuthRoutes($config);
  26. static::loadTenancyRoutes($config);
  27. }
  28. /**
  29. * Register auth routes for tenancy.
  30. *
  31. * @param array $config
  32. */
  33. public static function registerAuthRoutes(array $config)
  34. {
  35. $attributes = [
  36. 'domain' => Arr::get($config, 'route.domain'),
  37. 'prefix' => Arr::get($config, 'route.prefix'),
  38. 'middleware' => static::prependMiddleware(Arr::get($config, 'route.middleware')),
  39. ];
  40. app('router')->group($attributes, function ($router) use ($config) {
  41. /* @var \Illuminate\Routing\Router $router */
  42. $router->namespace('Encore\Admin\Controllers')->group(function ($router) {
  43. /* @var \Illuminate\Routing\Router $router */
  44. $router->resource('auth/users', 'UserController');
  45. $router->resource('auth/roles', 'RoleController');
  46. $router->resource('auth/permissions', 'PermissionController');
  47. $router->resource('auth/menu', 'MenuController', ['except' => ['create']]);
  48. $router->resource('auth/logs', 'LogController', ['only' => ['index', 'destroy']]);
  49. $router->post('_handle_form_', 'HandleController@handleForm')->name('admin.handle-form');
  50. $router->post('_handle_action_', 'HandleController@handleAction')->name('admin.handle-action');
  51. });
  52. $authController = Arr::get($config, 'auth.controller', AuthController::class);
  53. /* @var \Illuminate\Routing\Router $router */
  54. $router->get('auth/login', $authController.'@getLogin');
  55. $router->post('auth/login', $authController.'@postLogin');
  56. $router->get('auth/logout', $authController.'@getLogout');
  57. $router->get('auth/setting', $authController.'@getSetting');
  58. $router->put('auth/setting', $authController.'@putSetting');
  59. });
  60. }
  61. /**
  62. * Load tenancy routes.
  63. *
  64. * @param array $config
  65. */
  66. protected static function loadTenancyRoutes(array $config)
  67. {
  68. $routePath = ucfirst($config['directory']) . DIRECTORY_SEPARATOR . 'routes.php';
  69. if (file_exists($routePath)) {
  70. if (!app()->routesAreCached()) {
  71. $attributes = $config['route'];
  72. $attributes['middleware'] = static::prependMiddleware($attributes['middleware']);
  73. app('router')->group($attributes, function () use ($routePath) {
  74. require $routePath;
  75. });
  76. }
  77. }
  78. }
  79. /**
  80. * Prepend a multitenancy middleware.
  81. *
  82. * @param array $middleware
  83. * @return array
  84. */
  85. protected static function prependMiddleware(array $middleware) : array
  86. {
  87. array_unshift($middleware, static::$middleware);
  88. return $middleware;
  89. }
  90. }