요청에 맞는 적절한 타입의 permission 객체를 제공해주는 패키지 메인 클래스. ### app binding : xe.permission 으로 바인딩 되어 있음 ### Usage #### register * 권한 등록 php $grant = new Xpressengine\Permission\Grant(); $grant->set('access', 'guest'); $grant->set('create', 'member'); $grant->set('read', 'guest'); $grant->set('update', 'group', ['group_id_1', 'group_id_2']); $grant->add('update', 'user', ['user_id_1', 'user_id_2']); $grant->set('delete', [ 'rating' => 'super', 'group' => ['group_id_1', 'group_id_2'], 'user' => ['user_id_1', 'user_id_2'], ]); 저장소에 등록 app('xe.permission')->register('menu.menu1', $grant); * 제외 php except 메서드를 사용해 특정 사용자의 권한을 제외시킬 수 있다. except 는 사용자 아이디만 등록 되어진다. $grant->except('access', ['user_id_1', 'user_id_2']); #### define permission 은 Illuminate\Auth\Access\Gate 를 통해 사용되어 진다. 권한 검사를 하고자 하는 대상에 맞는 policy class 를 생성하여 등록시켜주어야 한다 php Gate::policy(Menu::class, MenuPolicy::class); policy class 는 Xpressengine\Permission\Policy 를 상속받아 구현한다. 이때 각 action 에 대한 메서드를 작성해야 하며 register 시 등록했던 permission 이름으로 등록된 정보를 가져와야 한다. php Class MenuItemPolicy extend Policy { public function access($user, $menu) { return $this->check($user, $this->get($menu->getNameForPermission()), 'access'); } } #### check 권한에 대한 검사는 policy 에 정의된 메서드명과 같게 action 을 지정하여 그 결과를 반환 받는다. php if (Gate::denies('access', $menu)) { throw new AccessDeniesException(); } else { ... } #### non object check 특정한 객체 없이 permission 이름만으로 권한 검사를 하고자 하는 경우 패키지내에 존재하는 InstancePolicy 를 사용하여 해결할 수 있다. php if (Gate::allows('create', new Instance('instance.name'))) { ... } * Gate 사용에 대한 더 많은 정보를 원한다면 laravel 메뉴얼 을 참고 한다.
Автор: XE Developers (developers@xpressengine.com)
 /**
  * 위젯박스를 삭제한다.
  *
  * @param WidgetBox|string $widgetbox 삭제할 위젯박스
  *
  * @return void
  */
 public function delete($widgetbox)
 {
     if (is_string($widgetbox)) {
         $widgetbox = $this->repository->find($widgetbox);
     }
     $this->permissionHandler->destroy('widgetbox.' . $widgetbox->id);
     $widgetbox->delete();
 }
Пример #2
0
 /**
  * Get a permission
  *
  * @param string $name    permission name
  * @param string $siteKey site key name
  * @return Permission|null
  */
 protected function get($name, $siteKey = 'default')
 {
     return $this->perm->get($name, $siteKey);
 }
 /**
  * 게시판 기본 권한 반환
  *
  * @return \Xpressengine\Permission\Permission
  */
 public function getGlobal()
 {
     $permission = $this->permissionHandler->get($this->prefix);
     return $permission;
 }
 public function updatePermission(PermissionHandler $permissionHandler, Request $request, $permissionId)
 {
     $permissionHandler->register($permissionId, $this->createAccessGrant($request->only(['accessRating', 'accessGroup', 'accessUser', 'accessExcept'])));
     return redirect()->back()->with('alert', ['type' => 'success', 'message' => '저장되었습니다.']);
 }
 public function testMoveFromChildToAnotherChild()
 {
     list($repo) = $this->getMocks();
     $instance = new PermissionHandler($repo);
     $mockParent = m::mock('Xpressengine\\Permission\\Permission');
     $mockPermission = m::mock('Xpressengine\\Permission\\Permission');
     $mockPermission->shouldReceive('get')->with('siteKey')->andReturn('default');
     $mockPermission->shouldReceive('get')->with('type')->andReturn('instance');
     $mockPermission->shouldReceive('getParent')->andReturn($mockParent);
     $mockToRegistered = m::mock('Xpressengine\\Permission\\Permission');
     $mockToRegistered->shouldReceive('get')->with('type')->andReturn('instance');
     $repo->shouldReceive('findByName')->once()->with('default', 'valid.to')->andReturn($mockToRegistered);
     $repo->shouldReceive('foster')->once()->with($mockPermission, 'valid.to');
     $instance->move($mockPermission, 'valid.to');
 }