public function testMakeReturnsInstancePermissionWhenWantInstance() { list($auth, $routes, $repo) = $this->getMocks(); $mockRegistered = m::mock('Xpressengine\\Permission\\Registered'); $mockRegisteredAsc1 = m::mock('Xpressengine\\Permission\\Registered'); $mockRegisteredAsc1->name = 'plugin.board'; $mockRegisteredAsc2 = m::mock('Xpressengine\\Permission\\Registered'); $mockRegisteredAsc2->name = 'plugin'; $mockRegistered->shouldReceive('addParent')->once()->with($mockRegisteredAsc1)->andReturnNull(); $mockRegistered->shouldReceive('addParent')->once()->with($mockRegisteredAsc2)->andReturnNull(); $mockUser = m::mock('Xpressengine\\Member\\Entities\\Guest'); $auth->shouldReceive('user')->andReturn($mockUser); $repo->shouldReceive('findByTypeAndName')->once()->with('default', 'instance', 'plugin.board.notice')->andReturn($mockRegistered); $repo->shouldReceive('fetchAncestor')->once()->with($mockRegistered)->andReturn([$mockRegisteredAsc1, $mockRegisteredAsc2]); $instance = new Factory($auth, $routes, $repo); $permission = $instance->make('instance', 'plugin.board.notice'); $this->assertInstanceOf('Xpressengine\\Permission\\Permissions\\InstancePermission', $permission); }
/** * 관리페이지 메뉴 목록을 생성한다. 현재 요청의 user와 route 정보를 이용하여 선택된 메뉴, 감추어야할 메뉴를 설정한다. * * @param Router $router router * @param boolean $isSuper 최고관리자 여부 * * @return void */ protected function makeMenuList(Router $router, $isSuper) { // 등록된 menu list를 가져온다. $menus = $this->getRegisteredMenus(); // menu를 tree로 구성한다. $this->menuList = new TreeCollection($menus); // menu가 지정된 route 목록을 가져온다. $routes = $router->getRoutes()->getSettingsMenuRoutes(); // 각 메뉴에 해당되는 route를 지정한다. foreach ($routes as $route) { /** @var Route $route */ $menuIds = array_get($route->getAction(), 'settings_menu', []); // 만약 route에 permission 정보가 있고, 그 permission을 현재 member가 통과하지 못하면 display=false로 지정한다. $permissions = array_get($route->getAction(), 'permission', []); $visible = false; if (!$isSuper) { foreach ((array) $permissions as $permissionId) { $registered = $this->permissions->make('settings', $permissionId); if ($registered->ables(Action::ACCESS) === true) { $visible = true; } } } else { $visible = true; } // 메뉴에 route 지정, foreach ((array) $menuIds as $menuId) { $menu = $this->menuList[$menuId]; $menu->route = $route; if ($visible === false) { $menu->display = false; } } } $this->setSelectedMenu($router->current()); }