1 在设计表中一个用户对应着多个角色,有时我们需要在页面中根据用户的角色,控制对应的页面展示 例如下表所示
我们在edusoho中并不需要去控制器里获取到当前用户,然后查看当前用户的角色,然后传值给模板操作,这里有个好用的模板函数
在Twig中有表达式 {{set user = data('User', {userId: app.user.id}) }} set 设置变量 data是模板函数,可以直接在模板里获取到当前用户信息 下面的 has_permission()函数判断当前用户是都有管理员权限,剩下的表达式,直接就像写逻辑表达式一样 and 并且 not in 值不在数组里附录上has_permission的实现方法
public function hasPermission($code) { $currentUser = ServiceKernel::instance()->getCurrentUser(); return $currentUser->hasPermission($code); } //判断是否具有权限的方法 public function hasPermission($code) { $currentUserPermissions = $this->getPermissions(); if (!empty($currentUserPermissions[$code])) { return true; } $tree = PermissionBuilder::instance()->getOriginPermissionTree(true); $codeTree = $tree->find(function ($tree) use ($code) { return $tree->data['code'] === $code; }); if (empty($codeTree)) { return false; } $disableTree = $codeTree->findToParent(function ($parent) { return isset($parent->data['disable']) && (bool) $parent->data['disable']; }); if (is_null($disableTree)) { return false; } $parent = $disableTree->getParent(); if (is_null($parent)) { return false; } if (empty($parent->data['parent'])) { return true; } else { return !empty($currentUserPermissions[$parent->data['code']]); } }