Skip to content

Commit 40a5a88

Browse files
committed
fix(auth): restore BRANCH context to PROFILE entity ensuring location-based permission overrides
1 parent d1db417 commit 40a5a88

3 files changed

Lines changed: 67 additions & 2 deletions

File tree

architecture/blueprints-es/database-design-er.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,18 @@ Ruta de Resolución: `Inquilino -> Sistema -> Rol -> Plantilla -> Permiso de Per
2727
```mermaid
2828
erDiagram
2929
TENANT ||--o{ SYSTEM_SUITE : "posee"
30+
TENANT ||--o{ BRANCH : "opera"
3031
SYSTEM_SUITE ||--o{ ROLE : "define"
3132
SYSTEM_SUITE ||--o{ FUNCTIONAL_MODULE : "contiene"
3233
3334
ROLE ||--o{ PERMISSION_TEMPLATE : "gobierna"
3435
PERMISSION_TEMPLATE ||--o{ PROFILE_PERMISSION : "materializado"
3536
37+
USER ||--o{ PROFILE : "actúa_como"
38+
BRANCH ||--o{ PROFILE : "contexto_de"
39+
PROFILE ||--o{ PROFILE_PERMISSION : "autoridad_efectiva"
40+
3641
FUNCTIONAL_MODULE ||--o{ FUNCTIONAL_SUBMODULE : "contiene"
37-
FUNCTIONAL_SUBMODULE ||--o{ FUNCTIONAL_OPTION : "provee"
3842
FUNCTIONAL_OPTION ||--o{ ACTION : "ejecuta"
3943
4044
ACTION ||--o{ PERMISSION_TEMPLATE : "acción_autorizada"
@@ -62,6 +66,14 @@ erDiagram
6266
uniqueidentifier OptionId FK "Exclusive Arc"
6367
}
6468
69+
PROFILE {
70+
uniqueidentifier ProfileId PK, FK
71+
uniqueidentifier TenantId FK "RLS"
72+
uniqueidentifier UserId FK
73+
uniqueidentifier RoleId FK
74+
uniqueidentifier BranchId FK "Contexto de Sucursal"
75+
}
76+
6577
PROFILE_PERMISSION {
6678
uniqueidentifier ProfileId PK, FK
6779
uniqueidentifier TemplateId PK, FK

architecture/blueprints/database-design-er.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,18 @@ Full Resolution Path: `Tenant -> System -> Role -> Template -> ProfilePermission
2727
```mermaid
2828
erDiagram
2929
TENANT ||--o{ SYSTEM_SUITE : "owns"
30+
TENANT ||--o{ BRANCH : "operates"
3031
SYSTEM_SUITE ||--o{ ROLE : "defines"
3132
SYSTEM_SUITE ||--o{ FUNCTIONAL_MODULE : "contains"
3233
3334
ROLE ||--o{ PERMISSION_TEMPLATE : "governs"
3435
PERMISSION_TEMPLATE ||--o{ PROFILE_PERMISSION : "materialized"
3536
37+
USER ||--o{ PROFILE : "acts_as"
38+
BRANCH ||--o{ PROFILE : "context_of"
39+
PROFILE ||--o{ PROFILE_PERMISSION : "effective_authority"
40+
3641
FUNCTIONAL_MODULE ||--o{ FUNCTIONAL_SUBMODULE : "contains"
37-
FUNCTIONAL_SUBMODULE ||--o{ FUNCTIONAL_OPTION : "provides"
3842
FUNCTIONAL_OPTION ||--o{ ACTION : "executes"
3943
4044
ACTION ||--o{ PERMISSION_TEMPLATE : "authorized_action"
@@ -62,6 +66,14 @@ erDiagram
6266
uniqueidentifier OptionId FK "Exclusive Arc"
6367
}
6468
69+
PROFILE {
70+
uniqueidentifier ProfileId PK, FK
71+
uniqueidentifier TenantId FK "RLS"
72+
uniqueidentifier UserId FK
73+
uniqueidentifier RoleId FK
74+
uniqueidentifier BranchId FK "Location Context"
75+
}
76+
6577
PROFILE_PERMISSION {
6678
uniqueidentifier ProfileId PK, FK
6779
uniqueidentifier TemplateId PK, FK

architecture/blueprints/er-export-formats.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ Table TENANT {
1616
Name nvarchar
1717
}
1818
19+
Table BRANCH {
20+
BranchId uniqueidentifier [pk]
21+
TenantId uniqueidentifier [note: 'RLS']
22+
Name nvarchar
23+
Code nvarchar
24+
}
25+
1926
Table USER {
2027
UserId uniqueidentifier [pk]
2128
TenantId uniqueidentifier
@@ -50,6 +57,7 @@ Table PROFILE {
5057
TenantId uniqueidentifier
5158
UserId uniqueidentifier
5259
RoleId uniqueidentifier
60+
BranchId uniqueidentifier [note: 'Branch Context']
5361
}
5462
5563
Table PROFILE_PERMISSION {
@@ -92,6 +100,7 @@ Table ACTION {
92100
93101
// Relationships
94102
Ref: USER.TenantId > TENANT.TenantId
103+
Ref: BRANCH.TenantId > TENANT.TenantId
95104
Ref: SYSTEM_SUITE.TenantId > TENANT.TenantId
96105
Ref: ROLE.SuiteId > SYSTEM_SUITE.SuiteId
97106
Ref: ROLE.TenantId > TENANT.TenantId
@@ -105,6 +114,7 @@ Ref: PERMISSION_TEMPLATE.OptionId > FUNCTIONAL_OPTION.OptionId
105114
Ref: PROFILE.TenantId > TENANT.TenantId
106115
Ref: PROFILE.UserId > USER.UserId
107116
Ref: PROFILE.RoleId > ROLE.RoleId
117+
Ref: PROFILE.BranchId > BRANCH.BranchId
108118
Ref: PROFILE_PERMISSION.ProfileId > PROFILE.ProfileId
109119
Ref: PROFILE_PERMISSION.TemplateId > PERMISSION_TEMPLATE.TemplateId
110120
Ref: FUNCTIONAL_MODULE.SuiteId > SYSTEM_SUITE.SuiteId
@@ -136,6 +146,28 @@ CREATE TABLE ACTION (
136146
)
137147
);
138148

149+
CREATE TABLE ROLE (
150+
RoleId UNIQUEIDENTIFIER PRIMARY KEY,
151+
SuiteId UNIQUEIDENTIFIER REFERENCES SYSTEM_SUITE(SuiteId),
152+
TenantId UNIQUEIDENTIFIER REFERENCES TENANT(TenantId),
153+
Name NVARCHAR(255)
154+
);
155+
156+
CREATE TABLE BRANCH (
157+
BranchId UNIQUEIDENTIFIER PRIMARY KEY,
158+
TenantId UNIQUEIDENTIFIER REFERENCES TENANT(TenantId),
159+
Name NVARCHAR(255),
160+
Code NVARCHAR(50)
161+
);
162+
163+
CREATE TABLE PROFILE (
164+
ProfileId UNIQUEIDENTIFIER PRIMARY KEY,
165+
TenantId UNIQUEIDENTIFIER REFERENCES TENANT(TenantId),
166+
UserId UNIQUEIDENTIFIER REFERENCES USER(UserId),
167+
RoleId UNIQUEIDENTIFIER REFERENCES ROLE(RoleId),
168+
BranchId UNIQUEIDENTIFIER REFERENCES BRANCH(BranchId)
169+
);
170+
139171
CREATE TABLE PERMISSION_TEMPLATE (
140172
TemplateId UNIQUEIDENTIFIER PRIMARY KEY,
141173
RoleId UNIQUEIDENTIFIER REFERENCES ROLE(RoleId),
@@ -152,4 +184,13 @@ CREATE TABLE PERMISSION_TEMPLATE (
152184
CASE WHEN OptionId IS NULL THEN 0 ELSE 1 END) = 1
153185
)
154186
);
187+
188+
CREATE TABLE PROFILE_PERMISSION (
189+
ProfileId UNIQUEIDENTIFIER REFERENCES PROFILE(ProfileId),
190+
TemplateId UNIQUEIDENTIFIER REFERENCES PERMISSION_TEMPLATE(TemplateId),
191+
IsAllowed BIT DEFAULT 1,
192+
IsDenied BIT DEFAULT 0,
193+
IsActive BIT DEFAULT 1,
194+
PRIMARY KEY (ProfileId, TemplateId)
195+
);
155196
```

0 commit comments

Comments
 (0)