친절한 우리 고모

친절한 고모의 친절한 이야기

  • 2025. 4. 27.

    by. 친절한 고모

    목차

      🧠 왜 사용자 권한 시스템이 중요한가?

      워드프레스는 기본적으로 사용자 역할(Role)과 권한(Capability) 기반의
      RBAC(Role Based Access Control) 시스템을 사용합니다.

      관리자는 모든 권한을 가지며,
      편집자·작성자·구독자 등은 제한된 역할만 수행 가능하죠.

      하지만!
      이 기본 구조로는 복잡한 멤버십, 교육 플랫폼, 멀티 작가 운영이 어렵습니다.

      👉 그래서 우리가 직접 사용자 역할과 권한을 커스터마이징해야 합니다.

       

      🧠 왜 사용자 권한 시스템이 중요한가?


      ✅ 기본 제공 사용자 역할과 권한

      역할주요 권한
      Administrator 전체 제어 가능, 사용자 관리 포함
      Editor 게시글, 페이지 편집·삭제·게시 가능
      Author 자신이 쓴 글만 편집·게시 가능
      Contributor 글 작성 가능, 게시 불가
      Subscriber 로그인·댓글 작성만 가능

      📌 이 외의 역할은 직접 추가하여 세분화할 수 있습니다.


      🧩 Role & Capability 핵심 개념

      요소설명
      Role 사용자 그룹 (예: editor, premium_member)
      Capability 실제 수행 가능한 권한 (예: edit_posts, read_private_pages)

      1개의 Role에는 여러 개의 Capability가 포함됩니다.


      🛠 사용자 역할과 권한 확인 및 추가 – functions.php

      1. 새로운 역할 추가

      php
      복사편집
      add_role('premium_member', '프리미엄 회원', array( 'read' => true, 'edit_posts' => false, 'view_premium_content' => true ));

      📌 이 역할은 글 편집은 못 하지만, view_premium_content라는 커스텀 권한을 가집니다.


      2. 권한 부여/회수

      php
      복사편집
      // 권한 추가 $role = get_role('editor'); $role->add_cap('edit_theme_options'); // 권한 제거 $role->remove_cap('delete_pages');

      관리자 또는 플러그인 실행 시 동적으로 제어 가능


      3. 특정 권한을 가진 사용자만 접근

      php
      복사편집
      if ( current_user_can('view_premium_content') ) { echo '<p>프리미엄 콘텐츠입니다.</p>'; } else { echo '<p>권한이 없습니다.</p>'; }

      🧪 플러그인 활용 – 비개발자도 권한 제어 가능

      추천 플러그인

      이름특징
      Members (by MemberPress) 사용자 역할 생성/수정/삭제, UI 기반 제어
      User Role Editor 권한 트리 UI, 조건부 역할 생성
      Advanced Access Manager 게시글/페이지 단위 접근 제어 가능
      WPFront User Role Editor 타임라인 기반 권한 변경 스케줄링 지원

      📦 실전 예제: 강의 플랫폼 역할 구성

      역할Capability 예시
      instructor edit_posts, upload_files, publish_courses
      student read, view_lesson_content
      premium_student view_lesson_content, download_materials
      guest read_only_public

      💡 사용자 역할 확장 팁

      1. 기본 역할 수정보다는 새 역할 추가가 안전
      2. 커스텀 Capability는 if(current_user_can())으로 직접 제어
      3. CPT(커스텀 포스트 타입) 등록 시 capability_type 설정 가능
      php
      복사편집
      register_post_type('course', array( 'capability_type' => 'course', 'map_meta_cap' => true, ));

      이렇게 하면 edit_course, delete_course 같은 커스텀 권한 자동 생성 가능!


      ✅ 고급 권한 설계 체크리스트

      항목완료 여부
      새로운 역할 생성 및 이름 설정 ✅ / ❌
      역할에 커스텀 권한(cap) 지정 ✅ / ❌
      조건문(current_user_can)으로 권한 제어 ✅ / ❌
      CPT별 capability 분리 설정 ✅ / ❌
      관리자 패널 내 사용자 역할 테스트 ✅ / ❌