WEBBOOK CHAPTER

기능이 아니라 경계를 지키는 웹 보안: 6장. 인가를 역할보다 자원 관계로 검증한다

6장. 인가를 역할보다 자원 관계로 검증한다

admin 문자열 하나로 권한을 끝내지 않는다. 주체, tenant, 역할, 자원 소유, 행동, 상태, 시간·위치 조건을 정책 입력으로 만든다. UI 버튼 숨김은 인가가 아니며 모든 API와 worker가 같은 정책 의미를 가져야 한다.


function canAssign(actor, reservation) {
  return actor.tenantId === reservation.tenantId &&
    actor.permissions.includes('reservation:assign') &&
    reservation.status === 'open';
}

positive·negative test를 쌍으로 만든다. 다른 tenant ID를 순회하고, 높은 역할도 경계를 넘지 못하며, 대량 export와 support impersonation은 별도 승인·감사를 요구한다.