From c31892056d7256f9f6574d20222b4cfbe446bd7c Mon Sep 17 00:00:00 2001 From: vilson <545522390@qq.com> Date: Sun, 10 May 2020 15:10:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: vilson <545522390@qq.com> --- application/common.php | 2 +- application/common/Model/Member.php | 1 + application/common/Model/MemberAccount.php | 3 +- application/project/controller/Auth.php | 2 + application/project/controller/Index.php | 1 + application/project/controller/Project.php | 4 +- application/project/middleware/Auth.php | 2 + extend/service/NodeService.php | 65 +++++++++++++++++----- 8 files changed, 60 insertions(+), 20 deletions(-) diff --git a/application/common.php b/application/common.php index e9dbadb..7acb28c 100644 --- a/application/common.php +++ b/application/common.php @@ -49,7 +49,7 @@ function getCurrentMember() function setCurrentMember($data) { - $key = 'member:info:' . $data['code']; + $key = 'member:info:' . $data['code'];//Member 里的 code if (!$data) { Cache::rm($key); }else{ diff --git a/application/common/Model/Member.php b/application/common/Model/Member.php index ca9b4f7..b33cc2c 100644 --- a/application/common/Model/Member.php +++ b/application/common/Model/Member.php @@ -59,6 +59,7 @@ class Member extends CommonModel $member['authorize'] = $list[0]['authorize']; $member['position'] = $list[0]['position']; $member['department'] = $list[0]['department']; + $member['organization_code'] = $list[0]['organization_code']; setCurrentMember($member); !empty($member['authorize']) && NodeService::applyProjectAuthNode(); diff --git a/application/common/Model/MemberAccount.php b/application/common/Model/MemberAccount.php index c3a44ea..3bd9aae 100644 --- a/application/common/Model/MemberAccount.php +++ b/application/common/Model/MemberAccount.php @@ -26,8 +26,7 @@ class MemberAccount extends CommonModel { NodeService::applyProjectAuthNode(); $menuModel = new ProjectMenu(); - $list = $menuModel->listForUser($isTree); - return $list; + return $menuModel->listForUser($isTree); } /** diff --git a/application/project/controller/Auth.php b/application/project/controller/Auth.php index b92cc20..1d7ad84 100644 --- a/application/project/controller/Auth.php +++ b/application/project/controller/Auth.php @@ -81,6 +81,7 @@ class Auth extends BasicApi */ protected function _apply_save($auth) { + //todo 优化 list($data, $post) = [[], Request::only('action,id,nodes')]; isset($post['nodes']) && $post['nodes'] = json_decode($post['nodes']); foreach (isset($post['nodes']) ? $post['nodes'] : [] as $node) { @@ -88,6 +89,7 @@ class Auth extends BasicApi } ProjectAuthNode::where(['auth' => $auth])->delete(); ProjectAuthNode::insertAll($data); + NodeService::clearMemberNodes(getCurrentOrganizationCode()); $this->success('节点授权更新成功!', ''); } diff --git a/application/project/controller/Index.php b/application/project/controller/Index.php index eb594b3..50f5ddc 100644 --- a/application/project/controller/Index.php +++ b/application/project/controller/Index.php @@ -77,6 +77,7 @@ class Index extends BasicApi $member['account_id'] = $memberAccount['id']; $member['is_owner'] = $memberAccount['is_owner']; $member['authorize'] = $memberAccount['authorize']; + $member['organization_code'] = $memberAccount['organization_code']; setCurrentMember($member); !empty($member['authorize']) && NodeService::applyProjectAuthNode(); setCurrentOrganizationCode($organizationCode); diff --git a/application/project/controller/Project.php b/application/project/controller/Project.php index 2833bda..d3f2231 100644 --- a/application/project/controller/Project.php +++ b/application/project/controller/Project.php @@ -44,7 +44,7 @@ class Project extends BasicApi * @return void * @throws DbException */ - public function index11() + /* public function index11() { $prefix = config('database.prefix'); $type = Request::post('type'); @@ -94,7 +94,7 @@ class Project extends BasicApi } } $this->success('', ['list' => $newList, 'total' => $list['total']]); - } + }*/ public function index() { diff --git a/application/project/middleware/Auth.php b/application/project/middleware/Auth.php index 2abf939..5a8faeb 100644 --- a/application/project/middleware/Auth.php +++ b/application/project/middleware/Auth.php @@ -68,6 +68,8 @@ class Auth } } // 访问权限检查 +// var_dump(auth($node, 'project')); +// die; if (!empty($access['is_auth']) && !auth($node, 'project')) { $nodeInfo = ProjectNode::where('node', $node)->find(); return json(['code' => 403, 'msg' => '无权限操作资源['. $nodeInfo['title'] . '],访问被拒绝']); diff --git a/extend/service/NodeService.php b/extend/service/NodeService.php index 57b5204..6f4b6c0 100644 --- a/extend/service/NodeService.php +++ b/extend/service/NodeService.php @@ -3,7 +3,9 @@ namespace service; +use app\common\Model\MemberAccount; use think\Db; +use think\facade\Cache; /** * 系统权限节点读取器 @@ -19,23 +21,54 @@ class NodeService */ public static function applyProjectAuthNode() { - cache('member_need_access_node', null); +// cache('member_need_access_node', null); $member = getCurrentMember(); - $member['nodes'] = []; - if (($authorize = $member['authorize'])) { - $where = ['status' => '1']; - $authorizeIds = Db::name('ProjectAuth')->whereIn('id', explode(',', $authorize))->where($where)->column('id'); - if (empty($authorizeIds)) { - $member['nodes'] = []; - return setCurrentMember($member); - } - $nodes = Db::name('ProjectAuthNode')->whereIn('auth', $authorizeIds)->column('node'); - $member['nodes'] = $nodes; - return setCurrentMember($member); - } - return setCurrentMember($member); +// $member['nodes'] = []; +// if (($authorize = $member['authorize'])) { +// $where = ['status' => '1']; +// $authorizeIds = Db::name('ProjectAuth')->whereIn('id', explode(',', $authorize))->where($where)->column('id'); +// if (empty($authorizeIds)) { +// $member['nodes'] = []; +// return setCurrentMember($member); +// } +// $nodes = Db::name('ProjectAuthNode')->whereIn('auth', $authorizeIds)->column('node'); +// $member['nodes'] = $nodes; +// return setCurrentMember($member); +// } +// return setCurrentMember($member); + $nodes = self::getMemberNodes($member['organization_code'], $member['account_id']); + $member['nodes'] = $nodes; + setCurrentMember($member); + return $nodes; } + public static function getMemberNodes($orgCode, $memberAccountId) + { + $cacheKey = 'member:nodes:' . $memberAccountId; + $tagKey = 'member:codes:' . $orgCode; +// self::clearMemberNodes($orgCode); + $nodes = Cache::tag($tagKey)->get($cacheKey); + if (!$nodes) { + $member = MemberAccount::get($memberAccountId); + $authorize = $member['authorize']; + $authorizeIds = Db::name('ProjectAuth')->whereIn('id', explode(',', $authorize))->where(['status' => '1'])->column('id'); + if (empty($authorizeIds)) { + $nodes = []; + } else { + $nodes = Db::name('ProjectAuthNode')->whereIn('auth', $authorizeIds)->column('node'); + } + Cache::tag($tagKey)->set($cacheKey, $nodes, 3600 * 24 * 7); + } + return $nodes; + } + + public static function clearMemberNodes($orgCode) + { + $tagKey = 'member:codes:' . $orgCode; + return Cache::clear($tagKey); + } + + /** * 获取项目账号授权节点 * @return array @@ -50,6 +83,7 @@ class NodeService return $nodes; } + /** * 检查账号节点权限 * @param string $node 节点 @@ -69,7 +103,8 @@ class NodeService if (!in_array($currentNode, self::getProjectAuthNode())) { return true; } - return in_array($currentNode, !empty($member['nodes']) ? (array)$member['nodes'] : []); + $memberNodes = self::getMemberNodes($member['organization_code'], $member['account_id']); + return in_array($currentNode, !empty($memberNodes) ? (array)$memberNodes : $memberNodes); } return false; }