PermissionEnum.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /*
  3. * This file is part of the Jiannei/lumen-api-starter.
  4. *
  5. * (c) Jiannei <longjian.huang@foxmail.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace App\Repositories\Enums;
  11. use Closure;
  12. use Illuminate\Support\Str;
  13. use Jiannei\Enum\Laravel\Contracts\LocalizedEnumContract;
  14. use Jiannei\Enum\Laravel\Enum;
  15. class PermissionEnum extends Enum implements LocalizedEnumContract
  16. {
  17. // 系统级别内置的权限:不允许分配权限给普通用户;(比如,只能超级管理员才能拥有)
  18. const SYSTEM = '000000';
  19. const SYSTEM_ACTIVITY_LOG_CLEAN = '000001';
  20. const SYSTEM_CACHE_CLEAR = '000002';
  21. // 路由级别权限:路由分组、路由操作;允许分配权限给普通用户,或分配给角色;ROUTE 开头
  22. // 定义规范:viewAny、view、create、update、delete...
  23. // https://learnku.com/docs/laravel/8.x/authorization/9382#f98610
  24. const ROUTE = '100000';
  25. const ROUTE_USERS = '100100';
  26. const ROUTE_USERS_CREATE = '100110';
  27. const ROUTE_USERS_DELETE = '100111';
  28. const ROUTE_USERS_UPDATE = '100112';
  29. const ROUTE_USERS_VIEW = '100113';
  30. const ROUTE_USERS_VIEW_ANY = '100114';
  31. const ROUTE_POSTS = '100200';
  32. const ROUTE_POSTS_CREATE = '100210';
  33. const ROUTE_POSTS_DELETE = '100211';
  34. const ROUTE_POSTS_UPDATE = '100212';
  35. const ROUTE_POSTS_VIEW = '100213';
  36. const ROUTE_POSTS_VIEW_ANY = '100214';
  37. // 数据级别权限:数据表权限,数据行权限,数据列权限
  38. const DATA = '200000';
  39. const DATA_USERS = '200100';
  40. const DATA_USERS_ROW = '200101';
  41. const DATA_USERS_COLUMN_EMAIL = '200110';
  42. const DATA_POSTS = '200200';
  43. const DATA_POSTS_ROW = '200201';
  44. const DATA_POSTS_BODY = '200210';
  45. public $name;
  46. public $code;
  47. public $type;
  48. public $description;
  49. public function __construct($enumValue, bool $strict = true)
  50. {
  51. parent::__construct($enumValue, $strict);
  52. $this->name = Str::lower(str_replace('_', ':', $this->key));
  53. $this->code = $enumValue;
  54. $this->type = Str::lower(current(explode('_', $this->key)));
  55. }
  56. /**
  57. * 根据常量定义构建权限.
  58. *
  59. * @return array
  60. */
  61. public static function makePermissions(): array
  62. {
  63. $rawPermissions = self::getInstances();
  64. $permissions = [];
  65. collect($rawPermissions)->each(function ($item) use (&$permissions) {
  66. $permissions[] = [
  67. 'name' => $item->name,
  68. ];
  69. });
  70. return $permissions;
  71. }
  72. /**
  73. * 前置-授权拦截检查.
  74. *
  75. * @return Closure
  76. */
  77. public static function gateBeforeCallback(): Closure
  78. {
  79. return function ($user, $ability) {
  80. return $user->isSuperAdmin() ?: null;
  81. };
  82. }
  83. }