19 Commits

Author SHA1 Message Date
YueGuobin
2efcc619b1
perf: batch RBAC permission checking for GET /projects
Replace per-project check_user_has_privilege calls with a single
batch method that performs 3 fixed DB queries regardless of project
count. Reduces GET /projects response time for 10000 projects from
~12s to ~290ms (40x improvement).
2026-05-27 13:27:35 +08:00
YueGuobin
ca5db7567c
fix: check both regular ACEs and resource pool ACEs for proper access control
This fix addresses a critical issue in the RBAC permission checking logic
introduced in PR #2750. When a project is shared through a resource pool,
both the project creator (with regular ACEs like "All endpoints") and the
shared user (with resource pool ACEs) should be able to see the project.

Changes:
- Modified `check_user_has_privilege` in `gns3server/db/repositories/rbac.py`
- Changed from if-elif (exclusive) to sequential (inclusive) checking
- Now checks regular ACEs first, then resource pool ACEs
- Both types of ACEs can grant access (OR logic instead of XOR)

This fixes the scenario where:
1. user100 has "All endpoints" ACE and creates a project
2. user100 shares the project via resource pool with user200
3. Both users should see the project (user100 via regular ACE, user200 via pool ACE)

Related to PR #2750 - RBAC user isolation implementation.
2026-05-27 00:17:52 +08:00
YueGuobin
5e4d9e057e
refactor: add efficient get_aces_for_path method for resource pool checks
Add a new repository method get_aces_for_path() that:
- Queries ACEs for a specific path at database level (more efficient)
- Preloads related user, group, and role objects to prevent 500 errors
- Keeps original get_aces() method unchanged to avoid performance impact

This improves both performance and code clarity for resource pool
deletion safety checks.
2026-05-26 12:59:37 +08:00
Sylvain MATHIEU OBS
0d834ee2a0 rbac fix: cannot add multiple time same privilege to a role 2023-09-18 13:34:46 +02:00
grossmj
a95dda0d1d Complete resource pool support for projects 2023-09-11 18:15:03 +07:00
grossmj
d53ef175f8 DB and API for resource pools 2023-09-07 17:31:11 +07:00
grossmj
0077fd98aa Add required privileges to all endpoints 2023-09-02 17:54:24 +07:00
grossmj
f3a4ad49f4 Check for group ACEs to find user privileges 2023-08-28 18:14:34 +10:00
grossmj
3e0592520b Handle ACE propagate and allowed 2023-08-28 12:06:01 +10:00
grossmj
57197c3d1c Comment unused code 2023-08-27 18:23:10 +10:00
grossmj
60ce1172e0 Use an ACL table to check for privileges 2023-08-27 18:20:42 +10:00
grossmj
9c456532d0 Pydantic v2 migration 2023-08-04 18:20:06 +10:00
grossmj
4c6135fe88 Add /permissions/prune to delete orphaned permissions 2021-08-17 21:55:59 +09:30
grossmj
d65b49acaa Add user permissions + RBAC tests. 2021-06-03 15:40:12 +09:30
grossmj
36a27c0c19 Force refresh of updated_at value for RBAC db models. 2021-06-01 16:12:06 +09:30
grossmj
74d820fd0a Use synchronize_session="fetch" when updating values. 2021-06-01 15:55:50 +09:30
grossmj
2e2e31337a Add description for user permission. 2021-06-01 12:55:16 +09:30
grossmj
fbc47598d9 Basic functional RBAC support. 2021-05-27 17:28:44 +09:30
grossmj
6d4da98b8e Base API and tables for RBAC support. 2021-05-25 18:34:59 +09:30