XpressEngine
  • INTRODUCE
  • 시작하기
    • 권장 사양
    • 터미널 환경 설치
    • 웹 환경 설치
    • 업데이트
    • 문제 해결(디버깅)
  • 사이트 설정
    • 회원 설정 및 관리
    • 관리자 비밀번호 설정
    • 사이트맵 추가 및 제거
    • 컨텐츠 관리 및 신고 집계
    • Store 토큰 설정
    • 익스텐션 설치 / 업데이트
    • 기본 테마 설정
    • SEO 설정
    • 다국어 설정
    • 캡챠 설정
  • 번들 플러그인
    • 미디어 라이브러리
    • 외부페이지 플러그인
    • 플러그인 업로드
  • 개발자 문서
    • 개요
    • 디렉토리 구조
    • 컴포넌트
    • 플러그인
    • 서비스
    • 라이프 사이클
    • 라우팅
    • 컨트롤러
    • 요청
    • 응답
    • 프레젠터
    • 뷰
    • 템플릿
  • 플러그인 개발
    • 개요
    • 기본경로 및 구조
    • 기본 플러그인 생성
    • 플러그인 정보 추가 및 수정
    • 관리자 사이트 메뉴 추가
    • 위젯 개발/제작
    • 모듈 개발/제작
    • 에디터 제작
    • 에디터 툴 제작
    • UI 오프젝트 제작
    • 토글 메뉴 제작
    • 다이나믹 필드 제작
    • 다이나믹 필드 스킨 제작
  • 테마 개발/제작
    • 기본경로 및 구조
    • 기본 테마 생성
    • 서브 테마 활용
    • 설정 파일 작성
    • 테마 편집 기능
  • 스킨 개발/제작
    • 기본경로 및 구조
    • 기본 스킨 생성
    • 설정 파일 작성
  • 서비스
    • 카테고리
    • 캡챠
    • 설정
    • 문서
    • 키생성(Keygen)
    • 메뉴/모듈
    • 이벤트/인터셉션
    • 파일/스토리지
    • 회원/인증
    • 모바일
    • 권한
    • 데이터베이스
    • 메일
    • 프론트엔드
    • 이미지처리
    • 세션
    • 헬퍼
    • 쿠키
    • UI오브젝트/폼빌더
    • 카운터
    • 휴지통
    • 유효성검사
    • 오류처리
    • 테마
    • 위젯박스
  • 프론트엔드 (JS)
    • 프론트 엔드 JS 시작하기
    • Lang
    • Page
    • Page Modal
    • Request
    • Validator
Powered by GitBook
On this page
  • 권한(permission)
  • 권한 검사 유형
  • 등록
  • 폼
  • 권한 등록을 위한 편의제공
  • 권한검사

Was this helpful?

  1. 서비스

권한

Previous모바일Next데이터베이스

Last updated 6 years ago

Was this helpful?

권한(permission)

XE는 관리자 시스템을 통한 동적인 권한검사를 위해 laravel 의 기능을 확장하여 제공하고 있습니다.

권한 검사 유형

permission 에서는 권한을 검사하기 위해 5가지 유형의 데이터를 가지고 있습니다.

  • RATING_TYPE: 사용자의 등급을 나타냅니다. 등급은 GUEST, MEMBER, MANAGER, SUPER 로 구분합니다.

  • GROUP_TYPE: 권한을 가지는 그룹들을 지정합니다.

  • USER_TYPE: 권한을 가지는 특정 사용자들을 지정합니다.

  • EXCEPT_TYPE: 권한을 가지지 않는 특정 사용자들을 지정합니다.

  • VGROUP_TYPE: 권한을 가지는 가상 그룹을 지정합니다.

위 다섯가지 권한중 EXCEPT_TYPE 이 가장 우선됩니다. 사용자가 EXCEPT_TYPE 에 속하지 않는경우 나머지 중 단 하나의 유형에만 속하여도 권한을 가지는 것으로 판단합니다.

등록

권한을 등록할때는 Grant 객체를 이용합니다. Grant 객체에 검사하고자 하는 특정 행위를 나타내는 키워드와 각 유형에 맞는 값들을 지정하고, 권한을 구분하는 대상의 이름과 함께 등록하게 됩니다.

$grant = new Grant();
$grant->set('show', Rating::MEMBER);
$grant->set('create', Grant::GROUP_TYPE, ['{groupId}']);
$grant->set('create', Grant::EXCEPT_TYPE, ['{userId}']);

app('xe.permission')->register('foo.bar', $grant);

하나의 행위에 해당하는 다양한 유형의 데이터를 배열을 이용하여 동시에 설정할 수 있습니다.

$grant->set('create', [
  Grant::RATING_TYPE => Rating::MEMBER,
  Grant::GROUP_TYPE => ['{groupId}'],
  Grant::EXCEPT_TYPE => ['{userId}']
]);

폼

위와 같은 데이터를 브라우저를 통해 전달 받기위해 ui object 가 제공됩니다.

<div>
  {!! uio('permission', $arguments) !!}
</div>

이때 전달되는 인자는 배열로 다음과 같은 구조를 필요로 합니다.

array(
  'mode' => 'manual', // manual or inherit
  'grant' => $grant_object? : new Grant(),      // 특정 행위에 해당하는 Grant 객체 등록 값
  'title' => 'create' // 특정 행위를 나타내는 키워드
  'groups' => []      // 전체 그룹
);

ui object 는 지정된 행위를 나타내는 키워드와 유형을 조합하여 input 의 이름을 제공합니다. 예를 들어 create 라는 행위에 대한 회원등급의 이름은 createRating 이 됩니다.

권한 등록을 위한 편의제공

관리자 페이지로부터 전달되는 권한 정보를 형식에 맞게 정제하고 등록하기에 불편함을 느낄 수 있습니다. 그래서 이런 부분에서 자유로워 질 수 있도록 클래스에 삽입되어지는 PermissionSupport trait 을 제공합니다.

class SomeController
{
  use PermissionSupport;

  public function getSetting()
  {
    $args = $this->getPermArguments('foo.bar', ['create', 'show']);
    ...
  }

  public function postSetting(Request $request)
  {
    $this->permissionRegister($request, 'foo.bar', ['create', 'show']);
    ...
  }

  ...
}

권한검사

if (Gate::denies('create', new Instance('foo.bar'))) {
  // throw exception
}

권한을 검사할때는 laravel 의 기능을 이용합니다. 첫번째 인자값에 행위에 대한 키워드를 전달하고 두번째 인자에 권한등록시 사용한 이름으로 생성된 Instance 객체를 전달합니다.

Authorization
Authorization