diff --git a/composer.json b/composer.json index 70dc80c..5953522 100755 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "mews/captcha": "^2.2", "spatie/laravel-activitylog": "^2.8", "spatie/laravel-permission": "^2.37", + "doctrine/annotations": "^1.8", "laravel/framework": "~5.5" }, "require-dev": { diff --git a/src/Annotations/PermissionAnnotation.php b/src/Annotations/PermissionAnnotation.php new file mode 100755 index 0000000..ad2e4c3 --- /dev/null +++ b/src/Annotations/PermissionAnnotation.php @@ -0,0 +1,15 @@ +publishes([__DIR__ . '/../resources/views/layouts' => resource_path('views/vendor/jfadmin/layouts')], 'jfadmin-views'); $this->publishes([__DIR__ . '/../resources/views/home' => resource_path('views/vendor/jfadmin/home')], 'jfadmin-views'); } + + AnnotationRegistry::registerFile(__DIR__ . '/Annotations/PermissionAnnotation.php'); } /** diff --git a/src/Repositories/ManageUserRepository.php b/src/Repositories/ManageUserRepository.php index d42e4f5..b60d766 100755 --- a/src/Repositories/ManageUserRepository.php +++ b/src/Repositories/ManageUserRepository.php @@ -12,6 +12,8 @@ use Imzhi\JFAdmin\Models\AdminUser; use Imzhi\JFAdmin\Models\Permission; use Imzhi\JFAdmin\Models\PermissionExtra; +use Doctrine\Common\Annotations\AnnotationReader; +use Imzhi\JFAdmin\Annotations\PermissionAnnotation; class ManageUserRepository { @@ -248,6 +250,8 @@ public function permissions(array $args = []) public function permissionsDetect() { + $reader = new AnnotationReader; + $routes_data = []; foreach (Route::getRoutes() as $route) { $route_name = $route->getName(); @@ -261,10 +265,11 @@ public function permissionsDetect() if (!method_exists($action_arr[0], $action_arr[1])) { continue; } + try { $reflection_method = new ReflectionMethod($action_arr[0], $action_arr[1]); - $comment = explode("\n", $reflection_method->getDocComment())[1]; - $comment = trim($comment, " \t\n\r\0\x0B*"); + $permission_annotation = $reader->getMethodAnnotation($reflection_method, PermissionAnnotation::class); + $permission_name = $permission_annotation->name; } catch (Exception $e) { Log::debug('jfadmin::manageuser.permissions.detect err', [ 'message' => $e->getMessage(), @@ -274,7 +279,8 @@ public function permissionsDetect() ]); return response()->fai(['msg' => "检测出错。控制器方法 {$action_name} 缺少注释。"]); } - $routes_data[$route_name] = $comment; + + $routes_data[$route_name] = $permission_name; } } $routes_key = array_keys($routes_data);