Skip to content

Commit 8a6018f

Browse files
cziebuhroroulet
authored andcommitted
Allow regular users to do write requests
1 parent ec227ba commit 8a6018f

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

asyncua/crypto/permission_rules.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from asyncua import ua
22
from asyncua.server.users import UserRole
33

4-
WRITE_TYPES = [
5-
ua.ObjectIds.WriteRequest_Encoding_DefaultBinary,
4+
ADMIN_TYPES = [
65
ua.ObjectIds.RegisterServerRequest_Encoding_DefaultBinary,
76
ua.ObjectIds.RegisterServer2Request_Encoding_DefaultBinary,
87
ua.ObjectIds.AddNodesRequest_Encoding_DefaultBinary,
@@ -11,11 +10,12 @@
1110
ua.ObjectIds.DeleteReferencesRequest_Encoding_DefaultBinary,
1211
]
1312

14-
READ_TYPES = [
13+
USER_TYPES = [
1514
ua.ObjectIds.CreateSessionRequest_Encoding_DefaultBinary,
1615
ua.ObjectIds.CloseSessionRequest_Encoding_DefaultBinary,
1716
ua.ObjectIds.ActivateSessionRequest_Encoding_DefaultBinary,
1817
ua.ObjectIds.ReadRequest_Encoding_DefaultBinary,
18+
ua.ObjectIds.WriteRequest_Encoding_DefaultBinary,
1919
ua.ObjectIds.BrowseRequest_Encoding_DefaultBinary,
2020
ua.ObjectIds.GetEndpointsRequest_Encoding_DefaultBinary,
2121
ua.ObjectIds.FindServersRequest_Encoding_DefaultBinary,
@@ -49,15 +49,15 @@ def check_validity(self, user, action_type, body):
4949
class SimpleRoleRuleset(PermissionRuleset):
5050
"""
5151
Standard simple role-based ruleset.
52-
Admins alone can write, admins and users can read, and anonymous users can't do anything.
52+
Admins alone can change address space, admins and users can read/write, and anonymous users can't do anything.
5353
"""
5454

5555
def __init__(self):
56-
write_ids = list(map(ua.NodeId, WRITE_TYPES))
57-
read_ids = list(map(ua.NodeId, READ_TYPES))
56+
admin_ids = list(map(ua.NodeId, ADMIN_TYPES))
57+
user_ids = list(map(ua.NodeId, USER_TYPES))
5858
self._permission_dict = {
59-
UserRole.Admin: set().union(write_ids, read_ids),
60-
UserRole.User: set().union(read_ids),
59+
UserRole.Admin: set().union(admin_ids, user_ids),
60+
UserRole.User: set().union(user_ids),
6161
UserRole.Anonymous: set()
6262
}
6363

tests/test_permissions.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ async def test_permissions_admin(srv_crypto_one_cert):
8888
assert await clt.get_objects_node().get_children()
8989
objects = clt.nodes.objects
9090
child = await objects.get_child(['0:MyObject', '0:MyVariable'])
91-
await child.read_value()
9291
await child.set_value(42.0)
93-
92+
assert await child.read_value() == 42.0
93+
await child.add_property(0, "MyProperty1", 3)
9494

9595
async def test_permissions_user(srv_crypto_one_cert):
9696
clt = Client(uri_crypto_cert)
@@ -106,9 +106,10 @@ async def test_permissions_user(srv_crypto_one_cert):
106106
assert await clt.get_objects_node().get_children()
107107
objects = clt.nodes.objects
108108
child = await objects.get_child(['0:MyObject', '0:MyVariable'])
109-
await child.read_value()
109+
await child.set_value(44.0)
110+
assert await child.read_value() == 44.0
110111
with pytest.raises(ua.uaerrors.BadUserAccessDenied):
111-
await child.set_value(42)
112+
await child.add_property(0, "MyProperty2", 3)
112113

113114

114115
async def test_permissions_anonymous(srv_crypto_one_cert):
@@ -121,6 +122,7 @@ async def test_permissions_anonymous(srv_crypto_one_cert):
121122
server_certificate=srv_crypto_params[0][1],
122123
mode=ua.MessageSecurityMode.SignAndEncrypt
123124
)
124-
await clt.connect()
125-
await clt.get_endpoints()
126-
await clt.disconnect()
125+
async with clt:
126+
await clt.get_endpoints()
127+
with pytest.raises(ua.uaerrors.BadUserAccessDenied):
128+
await clt.nodes.objects.get_children()

0 commit comments

Comments
 (0)