누가 무엇을 보는가
Toutadmin에는 하나하나 체크할 권한 표가 없습니다. 두 가지 역할, 네 가지 횡단 권한, 조직에서 유도되는 관리 관계, 그리고 한 가지 단순한 규칙이 있을 뿐입니다. 공간은 데이터를 한 줄도 읽기 전에 입장을 거절합니다. 이 문서는 코드에 적힌 그대로 모든 규칙을 늘어놓습니다.
원칙#
검사는 화면 여기저기에 흩어져 있지 않습니다. 한곳에 모여 있습니다. Node
쪽은 src/middleware/, PHP 쪽은 App\Core\Kernel이며, 모든 요청이
경로를 정하기 전에 그곳을 지납니다. 그래서 접근 정책 전체를 단숨에 읽을 수 있고, 새 문서가
빠질 수도 없습니다.
접근이 거절될 때 제품은 이유를 말하지 않습니다. 무덤덤한 문구와 함께 원래 공간으로 돌려보낼 뿐입니다. 수다스러운 오류는 그 화면이 존재한다는 것과 어떤 권한이 필요한지를 캐묻는 이에게 알려 주고 맙니다.
두 가지 역할#
| 역할 | 무엇인가 |
|---|---|
admin |
관리자. 계정을 만들고, 권한을 주고, 모듈을 켜고, 메일 주소와 메일 서버 설정에 손대고, 주소록에서 감추는 일을 다루고, 감사 기록을 읽고, 백업을 되돌리는 유일한 쪽입니다. |
employee |
구성원. 자기 공간, 주소록, 일정, 읽기 전용 근무표, 신청, 공용 금고, 지식 창고, 요청 형태의 재고. 그 밖의 모든 것은 권한이나 관리 직책에 달려 있습니다. |
공개 가입도, 누구나 쓰는 초대 링크도, 인증 제공자를 통한 자동 생성도 없습니다. 계정은 로그인한 관리자의 손에서 생기고, 그 행위는 기록에 남습니다. 이것은 설계상의 결정이지 설정이 아닙니다. 켤 방법이 없습니다.
관리자도 보지 못하는 것#
일부러 둔 세 가지 예외, 관리자라는 것만으로는 모자란 자리입니다.
- 내부 제보. 제보가 관리자를 겨눌 수도 있습니다. 제보는 지정된 담당자만 읽습니다. 관리자는 그 담당자를 지정할 뿐 거기서는 아무것도 읽지 않습니다.
- 접근 코드로 연 금고 칸. 코드로 연 접속은 뒤에 어떤 계정이 있든 결코 관리 접속이 아닙니다.
-
직원을 위한 공간.
/mon-espace와/agenda는 관리자를 제 대시보드로 돌려보냅니다. 관리 계정에는 휴가 잔여도, 상급자도, 급여 명세도 없습니다.
네 가지 횡단 권한#
관리 → 권한에서 하나씩, 이름을 지목해 줍니다. 각 묶음은 누르기 전에 미치는 범위를 보여 줍니다. 권한은 무엇이 열리는지 알고서 주는 것입니다.
| 권한 | 무엇이 열리는가 | 미치는 범위 |
|---|---|---|
is_hr인사 |
/rh, /parcours, /sante-securite,
/accueil, 금고 관리 |
프리랜서를 뺀 전 직원의 신청, 휴가 잔여, 급여 명세. |
is_finance재무 |
/gestion, /partenaires, /flotte,
/pieces, /import, 그리고 재고의 제한된 쪽 |
거래처, 계약, 청구서, 예산, 경비 정산, 비품, 회의실. |
is_it정보기술 |
/informatique, /developpement |
소프트웨어 자산, 업무 시스템 접근 권한, 정보 시스템 장애. |
is_referent내부 제보 창구 |
/alertes/signalements/… |
제보 접수. 직원 쉰 명부터 의무입니다. |
권한은 더해집니다. 공간을 열 뿐 어느 것도 닫지 않습니다. 한 사람이 여럿을 가질 수 있습니다. 관리자는 암묵적으로 전부를 가집니다 — 위의 세 예외만 빼고.
체크하지 않는 관리 관계#
'관리자' 체크 칸은 없습니다. 조직에서 어느 부서나 팀의
책임자로 지정되었기에 관리하는 것입니다. /mon-equipe 공간은 적어도 한 영역을
맡은 사람에게 열리고, 거기 나오는 사람 명단은 바로 그 영역의 사람들뿐입니다 — 한 명도 더
없습니다.
책임자는 오직 자기 영역에 한해 다음을 얻습니다.
- 제 팀의 부재와 신청 승인
- 일대일 면담
- 근무표 쓰기 권한
/qualite공간- 지식 창고에 쓰기
경영 지표#
/pilotage는 회사 전체를 봅니다. 관리자, 재무, 인사에게 열립니다. 접근 조건이 두
권한 중 하나가 아니라 둘의 합집합인 유일한 화면입니다.
읽기는 열려 있고 쓰기는 닫혀 있다#
네 공간은 공간이 아니라 HTTP 동사로 가릅니다. 보는 것은 열려 있고 손대는 것은 아닙니다. 감춘 화면과는 정반대입니다 — 아무도 읽을 수 없는 근무표는 누구에게도 쓸모가 없습니다.
| 공간 | 읽기 | 쓰기 |
|---|---|---|
/planning | 모두 | 책임자, 인사, 관리자 |
/base-de-connaissances | 모두, 글의 공개 범위 안에서 | 책임자, 인사, 관리자 |
/evenements | 모두 | 인사와 관리자 — 다만 제 자리를 신청하고 취소하는 일은 누구에게나 열려 있습니다 |
/stock | 각자 필요한 것을 청구합니다 | 품목, 입출고, 발주, 청구서: 재무 |
관리자 전용, 위임 불가#
| 공간 | 왜 |
|---|---|
/admin | 계정, 조직, 권한, 모듈, 외관. |
/securite | 감사 기록, 세션, 비밀번호 규칙. |
/sauvegardes | 복원은 데이터베이스 전체를 덮어씁니다. |
/rgpd | 개인정보 내보내기와 지우기. |
/integrations | API 토큰과 웹훅: 회사 데이터로 통하는 문을 여는 일. |
/direction | 합쳐 본 경영진 화면. |
/juridique | 주주, 임원, 총회. |
/demandes/types | 신청 유형을 정하는 것은 결재 경로를 쓰는 일입니다. |
자물쇠가 둘인 공간#
일곱 공간은 선택 모듈에 속합니다. 두 가지 조건이 필요합니다. 모듈이 켜져 있을 것, 그리고 권한이 있을 것. 모듈이 꺼져 있으면 페이지는 '접근 거부'가 아니라 404를 돌려줍니다. 꺼진 모듈은 존재하지 않으며, 거기서 유추할 것도 없습니다.
| 공간 | 모듈 | 추가로 필요한 권한 |
|---|---|---|
/comptabilite | 회계 | 재무 |
/paie | 급여 엔진 | 인사 |
/facturation-electronique | 전자 청구 | 재무 |
/stock | 재고와 구매 | 읽기는 열림, 쓰기는 재무 |
/tresorerie | 자금 관리 | 재무 |
/immobilisations | 고정자산 | 재무 |
/crm | 영업 CRM | 재무 |
노사협의회#
/cse 공간은 모든 직원에게 열립니다. /cse/gestion은 선출된 사람에게만
열립니다. 관리자인지 아닌지는 여기서 아무 상관이 없습니다. 선출되었거나, 아니거나입니다.
결재함#
누구나 자기와 관련된 문서를 보고 서명합니다. 결재함을 만들거나 거두어들이거나 남의 것을 보는 일에는 인사 권한이나 관리자 자격이 필요합니다.
구성원이 스스로 바꿀 수 없는 것#
세 항목은 모든 판본에서 관리자만 바꿀 수 있고, 프로필에 모습조차 보이지 않습니다.
- 메일 주소 — 로그인 아이디이기 때문입니다.
- 계정의 IMAP과 SMTP 설정.
- 주소록에서 감추기 — 스스로 자기를 지울 수 있는 회사 주소록은 더 이상 주소록이 아닙니다.
구성원의 손에 남는 것은 비밀번호, 사진, 소개, 전화번호, 표시 언어, 그리고 이중 인증입니다.
규칙은 짐작하지 말고 확인한다#
정책은 파일 하나에 들어 있습니다. 어떤 경로에 걸리는 규칙을 읽으려면:
# PHP 판
grep -n "/pilotage" app/Core/Kernel.php
# Node 판
grep -rn "/pilotage" src/middleware/
두 판본은 같은 규칙을 두 번 적은 형태로 지니며, 같은 시나리오로 확인합니다. 제한된 공간마다 권한 없는 계정으로 들어가려 시도하고 거절을 요구하는 테스트가 있습니다.
Toutadmin 문서 —— 2026-09-13에 생성. 소프트웨어와 분리된 독립 사이트입니다.