Skip to content

Commit f58e302

Browse files
feat: multi-role grants for nodes
Authorization of node actions is splitted in three roles: - fwadm - portsadm - tunadm Implement multiple role assignments for a single agent. With this new feature, a module like nethvoice-proxy can be granted both fwadm and portsadm role on the same node, eliminating the hack that define fake role names like "fwadm,portsadm". The comma in role names is now considered a split point by api-server to authorize the requested action.
1 parent bdbe4cf commit f58e302

File tree

4 files changed

+10
-58
lines changed

4 files changed

+10
-58
lines changed

core/imageroot/var/lib/nethserver/cluster/actions/add-node/50update

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -186,32 +186,10 @@ cluster.grants.grant(rdb, "add-custom-zone", f'node/{node_id}', "fwadm")
186186
cluster.grants.grant(rdb, "remove-custom-zone", f'node/{node_id}', "fwadm")
187187
cluster.grants.grant(rdb, "add-rich-rules", f'node/{node_id}', "fwadm")
188188
cluster.grants.grant(rdb, "remove-rich-rules", f'node/{node_id}', "fwadm")
189-
190-
cluster.grants.grant(rdb, "add-public-service", f'node/{node_id}', "tunadm")
191-
cluster.grants.grant(rdb, "remove-public-service", f'node/{node_id}', "tunadm")
192-
cluster.grants.grant(rdb, "add-custom-zone", f'node/{node_id}', "tunadm")
193-
cluster.grants.grant(rdb, "remove-custom-zone", f'node/{node_id}', "tunadm")
194189
cluster.grants.grant(rdb, "add-tun", f'node/{node_id}', "tunadm")
195190
cluster.grants.grant(rdb, "remove-tun", f'node/{node_id}', "tunadm")
196-
197191
cluster.grants.grant(rdb, "allocate-ports", f'node/{node_id}', "portsadm")
198192
cluster.grants.grant(rdb, "deallocate-ports", f'node/{node_id}', "portsadm")
199-
cluster.grants.grant(rdb, "allocate-ports", f'node/{node_id}', "fwadm,portsadm")
200-
cluster.grants.grant(rdb, "deallocate-ports", f'node/{node_id}', "fwadm,portsadm")
201-
cluster.grants.grant(rdb, "add-public-service", f'node/{node_id}', "fwadm,portsadm")
202-
cluster.grants.grant(rdb, "remove-public-service", f'node/{node_id}', "fwadm,portsadm")
203-
cluster.grants.grant(rdb, "add-custom-zone", f'node/{node_id}', "fwadm,portsadm")
204-
cluster.grants.grant(rdb, "remove-custom-zone", f'node/{node_id}', "fwadm,portsadm")
205-
cluster.grants.grant(rdb, "add-rich-rules", f'node/{node_id}', "fwadm,portsadm")
206-
cluster.grants.grant(rdb, "remove-rich-rules", f'node/{node_id}', "fwadm,portsadm")
207-
cluster.grants.grant(rdb, "allocate-ports", f'node/{node_id}', "tunadm,portsadm")
208-
cluster.grants.grant(rdb, "deallocate-ports", f'node/{node_id}', "tunadm,portsadm")
209-
cluster.grants.grant(rdb, "add-tun", f'node/{node_id}', "tunadm,portsadm")
210-
cluster.grants.grant(rdb, "remove-tun", f'node/{node_id}', "tunadm,portsadm")
211-
cluster.grants.grant(rdb, "add-public-service", f'node/{node_id}', "tunadm,portsadm")
212-
cluster.grants.grant(rdb, "remove-public-service", f'node/{node_id}', "tunadm,portsadm")
213-
cluster.grants.grant(rdb, "add-custom-zone", f'node/{node_id}', "tunadm,portsadm")
214-
cluster.grants.grant(rdb, "remove-custom-zone", f'node/{node_id}', "tunadm,portsadm")
215193

216194
# Grant on cascade the owner role on the new node, to users with the owner
217195
# role on cluster

core/imageroot/var/lib/nethserver/cluster/update-core-pre-modules.d/50update_grants

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,18 @@ cluster.grants.grant(rdb, action_clause="list-modules", to_clause="accountprovi
2121

2222
#
2323
# Reuse and reallocate TCP/UDP port range #6974
24+
# Fix rich rules management #7836
2425
#
2526
for node_id in set(rdb.hvals('cluster/module_node')):
2627
cluster.grants.grant(rdb, "allocate-ports", f'node/{node_id}', "portsadm")
2728
cluster.grants.grant(rdb, "deallocate-ports", f'node/{node_id}', "portsadm")
28-
cluster.grants.grant(rdb, "allocate-ports", f'node/{node_id}', "fwadm,portsadm")
29-
cluster.grants.grant(rdb, "deallocate-ports", f'node/{node_id}', "fwadm,portsadm")
30-
cluster.grants.grant(rdb, "add-public-service", f'node/{node_id}', "fwadm,portsadm")
31-
cluster.grants.grant(rdb, "remove-public-service", f'node/{node_id}', "fwadm,portsadm")
32-
cluster.grants.grant(rdb, "add-custom-zone", f'node/{node_id}', "fwadm,portsadm")
33-
cluster.grants.grant(rdb, "remove-custom-zone", f'node/{node_id}', "fwadm,portsadm")
34-
cluster.grants.grant(rdb, "allocate-ports", f'node/{node_id}', "tunadm,portsadm")
35-
cluster.grants.grant(rdb, "deallocate-ports", f'node/{node_id}', "tunadm,portsadm")
36-
cluster.grants.grant(rdb, "add-tun", f'node/{node_id}', "tunadm,portsadm")
37-
cluster.grants.grant(rdb, "remove-tun", f'node/{node_id}', "tunadm,portsadm")
38-
cluster.grants.grant(rdb, "add-public-service", f'node/{node_id}', "tunadm,portsadm")
39-
cluster.grants.grant(rdb, "remove-public-service", f'node/{node_id}', "tunadm,portsadm")
40-
cluster.grants.grant(rdb, "add-custom-zone", f'node/{node_id}', "tunadm,portsadm")
41-
cluster.grants.grant(rdb, "remove-custom-zone", f'node/{node_id}', "tunadm,portsadm")
29+
cluster.grants.grant(rdb, "add-rich-rules", f'node/{node_id}', "fwadm")
30+
cluster.grants.grant(rdb, "remove-rich-rules", f'node/{node_id}', "fwadm")
31+
rdb.delete(
32+
f'node/{node_id}/roles/fwadm,portsadm',
33+
f'node/{node_id}/roles/tunadm,portsadm',
34+
)
35+
4236
#
4337
# END of grant updates
4438
#

core/imageroot/var/lib/nethserver/node/install-finalize.sh

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -121,33 +121,16 @@ cluster.grants.grant(rdb, action_clause="add-public-service", to_clause="fwadm"
121121
cluster.grants.grant(rdb, action_clause="remove-public-service", to_clause="fwadm", on_clause='node/1')
122122
cluster.grants.grant(rdb, action_clause="add-custom-zone", to_clause="fwadm", on_clause='node/1')
123123
cluster.grants.grant(rdb, action_clause="remove-custom-zone", to_clause="fwadm", on_clause='node/1')
124-
124+
cluster.grants.grant(rdb, action_clause="add-rich-rules", to_clause="fwadm", on_clause=f'node/1')
125+
cluster.grants.grant(rdb, action_clause="remove-rich-rules", to_clause="fwadm", on_clause=f'node/1')
125126
cluster.grants.grant(rdb, action_clause="add-tun", to_clause="tunadm", on_clause='node/1')
126127
cluster.grants.grant(rdb, action_clause="remove-tun", to_clause="tunadm", on_clause='node/1')
127128
cluster.grants.grant(rdb, action_clause="add-public-service", to_clause="tunadm", on_clause='node/1')
128129
cluster.grants.grant(rdb, action_clause="remove-public-service", to_clause="tunadm", on_clause='node/1')
129130
cluster.grants.grant(rdb, action_clause="add-custom-zone", to_clause="tunadm", on_clause='node/1')
130131
cluster.grants.grant(rdb, action_clause="remove-custom-zone", to_clause="tunadm", on_clause='node/1')
131-
132132
cluster.grants.grant(rdb, action_clause="allocate-ports", to_clause="portsadm", on_clause='node/1')
133133
cluster.grants.grant(rdb, action_clause="deallocate-ports", to_clause="portsadm", on_clause='node/1')
134-
cluster.grants.grant(rdb, action_clause="allocate-ports", to_clause="fwadm,portsadm", on_clause='node/1')
135-
cluster.grants.grant(rdb, action_clause="deallocate-ports", to_clause="fwadm,portsadm", on_clause='node/1')
136-
cluster.grants.grant(rdb, action_clause="add-public-service", to_clause="fwadm,portsadm", on_clause='node/1')
137-
cluster.grants.grant(rdb, action_clause="remove-public-service", to_clause="fwadm,portsadm", on_clause='node/1')
138-
cluster.grants.grant(rdb, action_clause="add-custom-zone", to_clause="fwadm,portsadm", on_clause='node/1')
139-
cluster.grants.grant(rdb, action_clause="remove-custom-zone", to_clause="fwadm,portsadm", on_clause='node/1')
140-
cluster.grants.grant(rdb, action_clause="allocate-ports", to_clause="tunadm,portsadm", on_clause='node/1')
141-
cluster.grants.grant(rdb, action_clause="deallocate-ports", to_clause="tunadm,portsadm", on_clause='node/1')
142-
cluster.grants.grant(rdb, action_clause="add-tun", to_clause="tunadm,portsadm", on_clause='node/1')
143-
cluster.grants.grant(rdb, action_clause="remove-tun", to_clause="tunadm,portsadm", on_clause='node/1')
144-
cluster.grants.grant(rdb, action_clause="add-public-service", to_clause="tunadm,portsadm", on_clause='node/1')
145-
cluster.grants.grant(rdb, action_clause="remove-public-service", to_clause="tunadm,portsadm", on_clause='node/1')
146-
cluster.grants.grant(rdb, action_clause="add-custom-zone", to_clause="tunadm,portsadm", on_clause='node/1')
147-
cluster.grants.grant(rdb, action_clause="remove-custom-zone", to_clause="tunadm,portsadm", on_clause='node/1')
148-
cluster.grants.grant(rdb, action_clause="add-rich-rules", to_clause="fwadm,portsadm", on_clause='node/1')
149-
cluster.grants.grant(rdb, action_clause="remove-rich-rules", to_clause="fwadm,portsadm", on_clause='node/1')
150-
151134
cluster.grants.grant(rdb, action_clause="update-routes", to_clause="accountprovider", on_clause='cluster')
152135
cluster.grants.grant(rdb, action_clause="bind-user-domains", to_clause="accountconsumer", on_clause='cluster')
153136
cluster.grants.grant(rdb, action_clause="bind-user-domains", to_clause="accountprovider", on_clause='cluster')

docs/modules/port_allocation.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,6 @@ with other existing node-related roles:
4040
- `org.nethserver.authorizations = node:fwadm,portsadm`
4141
- `org.nethserver.authorizations = node:tunadm,portsadm`
4242

43-
Note that the value must be exactly one of the above. Other combinations
44-
like `node:portsadm,fwadm` are not valid.
45-
4643
The module will be granted execution permissions for the following actions
4744
on the local node:
4845
- `allocate-ports`

0 commit comments

Comments
 (0)