* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
(워드프레스 해부 ⑪) 회원
사용자는 두 테이블로 나뉜다. wp_users엔 로그인 아이디·이메일·암호 같은 기본 정보가, wp_usermeta엔 나머지가 들어간다. 그런데 여기서 놀라운 게 하나 있다 — “관리자”, “편집자” 같은 역할이 사실 wp_usermeta에 저장된 데이터라는 점이다.
정확히는 wp_capabilities라는 meta_key에 역할이 담긴다. 그리고 역할(role)은 능력(capability)의 묶음일 뿐이다. “편집자”는 edit_posts, publish_posts, edit_others_posts 같은 개별 능력들을 한데 묶은 이름이다. 워드프레스가 “이 사람이 글을 지울 수 있나?”를 판단할 때는 역할 이름이 아니라 current_user_can('delete_posts')처럼 능력 단위로 확인한다.
이 구조라서 유연하다. 기본 역할(관리자·편집자·작성자·기여자·구독자) 말고 “특정 능력만 가진 커스텀 역할”을 얼마든지 만들 수 있다. 예를 들어 “글은 쓰되 발행은 못 하는” 역할.
직접 해보기
# 내 사용자의 역할이 usermeta 어디에 있는지 확인
$ wp user meta get 1 wp_capabilities
# → a:1:{s:13:"administrator";b:1;} (직렬화된 배열)
# 커스텀 역할 만들기 — '기여 편집자'에게 글 편집 능력만 부여
$ wp role create contrib_editor "기여 편집자"
$ wp cap add contrib_editor edit_posts edit_published_posts
# 특정 사용자에게 부여
$ wp user set-role 5 contrib_editor
✅ 확인 —
wp user meta get 1 wp_capabilities로 1번(보통 최초 관리자) 사용자의 권한을 보면administrator가 들어 있다. 이게 “역할은 결국 usermeta에 저장된 능력 묶음”이라는 구조의 증거다.
기본 역할과 할 수 있는 일
워드프레스 기본 역할은 다섯이다. 아래로 내려갈수록 능력이 줄어든다. 새 사용자를 만들 때 이 중 무엇을 줄지가 곧 보안 결정이다.
| 역할 | 할 수 있는 것 |
|---|---|
| 관리자(administrator) | 전부 — 플러그인·테마·사용자·설정 |
| 편집자(editor) | 모든 사람의 글·페이지 관리·발행 |
| 작성자(author) | 자기 글 작성·발행·삭제 |
| 기여자(contributor) | 자기 글 작성(발행은 못 함) |
| 구독자(subscriber) | 프로필 관리·읽기 |
역할·능력을 코드로 다루기
역할과 능력은 코드로 만들고 조절한다. add_role로 새 역할을 만들고, 기존 역할에 add_cap·remove_cap으로 개별 능력을 더하거나 뺀다.
// 새 역할 만들기 (구독자 능력 + 글 편집 하나 추가)
add_role( 'shop_manager', '샵 매니저', array(
'read' => true,
'edit_posts' => true,
) );
// 기존 역할에 능력 추가
$editor = get_role( 'editor' );
$editor->add_cap( 'manage_options' ); // (예시 — 신중히!)
권한 검사는 능력으로 — current_user_can
코드에서 ‘이 사용자가 이걸 해도 되나’는 능력 이름으로 검사한다. 역할 이름(== 'administrator')이 아니라 능력으로 검사하는 게 정석이다. 역할은 바뀔 수 있어도 능력 기준은 안정적이기 때문이다.
if ( current_user_can( 'edit_posts' ) ) { /* 글 편집 UI 노출 */ }
if ( current_user_can( 'edit_post', $post_id ) ) { /* 이 글을 편집 가능? */ }
if ( current_user_can( 'manage_options' ) ) { /* 설정 변경 가능? */ }
최소 권한 원칙
보안의 기본은 사람마다 딱 필요한 만큼의 역할만 주는 것이다. 글만 쓰는 외부 필자에게 관리자를 주지 않는다. 관리자 계정이 하나라도 뚫리면 사이트 전체가 넘어가기 때문에, 평소엔 낮은 권한 계정으로 작업하고 관리 작업이 필요할 때만 관리자를 쓰는 습관도 큰 도움이 된다.
역할이 꼬이거나, 멀티사이트라면
역할 정보는 wp_usermeta의 wp_capabilities에 저장된다. 그래서 역할 관리 플러그인으로 이것저것 바꾸다 보면 찌꺼기가 남기도 한다. 또 멀티사이트(35편)에선 관리자 위에 네트워크 전체를 다루는 슈퍼 관리자가 하나 더 있다는 점도 기억해 두자.
사용자까지 봤으니, 데이터베이스 모듈의 마지막 — 카테고리·태그가 3개 테이블에 나뉘어 저장되는 구조다. 왜 굳이 3개로 쪼갰는지 알면 워드프레스 설계가 보인다.
자주 묻는 질문 (FAQ)
역할(role)과 권한(capability)은 뭐가 다른가요?
권한은 개별 능력(글 편집 등), 역할은 그 권한들의 묶음입니다. 관리자·편집자·기여자 등이 역할입니다.
커스텀 역할을 만들 수 있나요?
네, add_role로 새 역할을 만들고 필요한 capability를 부여할 수 있습니다.

답글 남기기