본문 바로가기
C.W.K.
Stream
Lesson 03 of 06 · published

Permissions & 기본 세트

~13 min · tauri, permissions, security, acl

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"permission은 이름 붙은 권한 하나야. 그 이름 읽는 법만 익히면 시스템 전체가 안 신비로워져."

permission identifier 읽는 법

permission은 구조가 뻔한 문자열이야. <출처>:<이름> 꼴이지. 출처는 core(Tauri 내장)거나 플러그인 이름(fs, dialog, shell, store…)이고. 이름은 default처럼 잘 골라 묶어둔 세트거나 allow-read-text-file처럼 딱 하나만 여는 세밀한 권한이야. 그러니까 core:default는 '기본으로 안전한 core API', fs:allow-read-text-file은 딱 '텍스트 파일 읽기', shell:allow-execute는 '프로세스 실행'인 거지. 이름을 읽을 줄 알면 정확하게 허락할 수 있어.

기본 세트냐, 세밀한 권한이냐

플러그인은 대개 흔히 쓰이고 적당히 안전한 command를 묶은 default permission을 내놔 — 출발점으로 합리적이지. default가 필요 이상으로 열어주는 것 같으면 개별 allow- permission으로 내려가서 네 앱이 실제로 부르는 command만 적어. 세밀하게 가면 타이핑은 늘고 공격면은 확 줄어. 힘센 것들(파일시스템, 셸)엔 편한 default보다 세밀한 목록을 골라.

Allow랑 Deny

permission엔 allow- 형태랑 deny- 형태가 있고, deny가 이겨. 넓은 세트를 허락해놓고 그 안의 위험한 구석만 콕 집어 막을 수 있다는 뜻이야 — 안전장치를 두 겹으로 거는 거지. 허락은 해놨는데 command가 영문 모르게 거부당하면, deny permission(이나 scope)이 네 allow를 덮고 있는지 확인해. 이 우선순위는 일부러 그렇게 만든 거야. deny가 허락에서 예외를 파내는 방법이거든.

Code

넓게 말고 딱 필요한 권한만 허락하기·json
// permission identifier 파싱:
//   core:default                     기준 안전 core API
//   core:window:allow-set-title      특정 창 권한 하나
//   fs:allow-read-text-file          텍스트 파일 읽기 (플러그인: fs)
//   dialog:allow-open                파일 열기 다이얼로그
//   shell:allow-execute              프로세스 실행 (강력!)

{
  "identifier": "main-caps",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "dialog:allow-open",          // 세밀: 열기 다이얼로그만
    "fs:allow-read-text-file"     // 세밀: 텍스트 읽기, 그 외 없음
    // 주목: 셸 없음, fs 쓰기 없음 — 안 필요하고, 안 부여됨
  ]
}

External links

Exercise

앱에 dialog 플러그인을 넣고 dialog:allow-open 만 허락해(dialog:default 말고). 프론트엔드에서 열기 다이얼로그를 불러서 되는지 확인해. 그다음 허락 안 한 다른 dialog command(save 같은)를 시도해서 permission 에러로 실패하는 걸 봐. 세밀한 permission이 딱 하나만 열고 나머지는 막는다는 걸 직접 느낀 거야.
Hint
tauri-plugin-dialog를 넣고 capability에 dialog:allow-open을 적어. save 다이얼로그는 막혀 — open만 허락했으니까. 그 거부가 버그가 아니라 레슨이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.