CAKE20

AI Web PaaS

인증과 클라이언트 Route Hook

공통 인증은 package.json에, 특수 이동 조건은 app/middleware에 작성합니다.

로그인·Role 자동 라우팅

  • true는 로그인만, 문자열은 한 Role, 문자열 배열은 그중 한 Role을 요구합니다.
  • false는 더 넓은 보호 규칙 안에서 특정 경로를 공개하는 예외입니다. 더 긴 경로 규칙을 먼저 적용합니다.
  • 페이지 경로는 미로그인 사용자를 /login으로, Role 불일치는 /403으로 이동합니다. login과 denied 키로 기본 이동 경로를 바꿀 수 있습니다.
  • /api 경로는 같은 규칙을 서버의 auth.require로 검사해 401 또는 403을 반환합니다.
  • 페이지와 실제 API 경로를 같은 auth 객체에 각각 명시합니다. 페이지에서 호출할 API 경로를 Runtime이 추측하지 않습니다.
  • 일반 로그인 검사를 위해 app/middleware/login.hook.ts 또는 server/hooks/login.hook.ts를 만들지 않습니다.
// package.json
{
  "auth": {
    "/account/*": true,
    "/api/account/*": true,
    "/admin/*": "admin",
    "/api/admin/*": ["admin", "owner"],
    "/admin/health": false
  }
}

특수 페이지 이동 조건

  • app/middleware는 로그인·Role 외의 특수한 클라이언트 이동 조건에만 사용합니다.
  • app/middleware와 하위 폴더의 *.hook.ts를 파일명 오름차순으로 실행합니다.
  • config의 active와 path로 실행 여부와 대상 경로를 좁힐 수 있습니다.
  • undefined를 반환하면 이동을 계속하고 false는 취소합니다. 문자열이나 Cake20 View Router 경로 객체를 반환하면 해당 페이지로 이동합니다.
// app/middleware/leave.hook.ts
export const config = {
  path: "/editor/*"
};

export default () => {
  if (store.editor.dirty) return false;
};

Preview와 세부 권한

  • package.json auth는 프런트와 서버의 공통 1차 접근을 제어합니다. 소유권, HTTP 메서드와 데이터별 권한은 각 API에서 auth.require로 검사합니다.
  • 디자인 Preview와 템플릿 Preview에서는 보호 화면을 확인할 수 있도록 프런트 auth 자동 라우팅과 Route Hook을 실행하지 않습니다.
  • Preview prepass는 app/preview/User.json의 첫 사용자 Role로 서버 auth 규칙을 검사하므로 보호 API의 샘플 응답도 운영 규칙과 맞춥니다.
  • Hook 파일도 모든 UI 빌드에서 import하고 문법을 검사하므로 잘못된 코드는 Preview와 운영 빌드에서 동일하게 빌드 오류로 안내합니다.