donjan-deng / hyperf-casbin

适配 Hyperf 的开源访问控制框架Casbin
Apache License 2.0
86 stars 21 forks source link

在Event::ON_START阶段,处理角色与权限时遇到这个异常 #17

Closed wasdujk closed 2 years ago

wasdujk commented 2 years ago

/config/autoload/server.php ... 'callbacks' => [ // 在里面重载所有角色的权限 Event::ON_START=> [App\Controller\IndexController::class, 'onInit'], Event::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'], Event::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'], Event::ON_WORKER_EXIT => [Hyperf\Framework\Bootstrap\WorkerExitCallback::class, 'onWorkerExit'], ],

异常内容 PHP Warning: Swoole\Server::sendMessage(): can't send messages to self in /www/wwwroot/test/vendor/donjan-deng/hyperf-casbin/src/Listener/OnPolicyChangedListener.php on line 42

donjan-deng commented 2 years ago

IndexController onInit 做了什么

wasdujk commented 2 years ago

public function onInit() { $fetchMerInfo = $this->client->get("/pi/getRoles"); $code = $fetchMerInfo->getStatusCode(); $responseBody = (string)$fetchMerInfo->getBody();

    try {
        // 请求成功
        if ($code === 200) {
            $body = json_decode($responseBody, true);
            $data = $body['data'];
            foreach ($data as $item) {
                // 根据接口,重载所有权限信息
                // 1.遍历删除所有role
                Enforcer::deletePermissionsForUser($item['role_name']);
                if ($item['status']) {
                    $nodes = $item['nodes'];
                    $rules = $item['rules'];
                    // 2.遍历网点列表装载权限
                    foreach ($nodes as $node) {
                        foreach ($rules as $rule) {
                            Enforcer::addPermissionForUser($item['role_name'], $node, $rule);
                        }
                    }
                }
            }
        }

    } catch (\Exception $e) {
        var_dump([
            'm' => $e->getMessage(),
            'l' => $e->getLine(),
            'f' => $e->getFile()
        ]);
    }
}
donjan-deng commented 2 years ago

https://github.com/donjan-deng/hyperf-casbin/releases/tag/3.18.0