-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathRoleUserManagerMixIn.py
More file actions
56 lines (39 loc) · 1.34 KB
/
RoleUserManagerMixIn.py
File metadata and controls
56 lines (39 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"""The RoleUserManager mixin."""
from MiscUtils import NoDefault
from .RoleUser import RoleUser
from .Role import Role
class RoleUserManagerMixIn:
"""Mixin class for mapping names to roles.
This mixin adds the functionality of keeping a dictionary mapping
names to role instances. Several accessor methods are provided for this.
"""
# region Init
def __init__(self):
self._roles = {}
self.initUserClass()
def initUserClass(self):
"""Invoked by __init__ to set the default user class to RoleUser."""
# pylint: disable=no-member
self.setUserClass(RoleUser)
# endregion Init
# region Roles
def addRole(self, role):
if not isinstance(role, Role):
raise TypeError(f'{role} is not a Role object')
name = role.name()
if name in self._roles:
raise KeyError(f'role name {name!r} already exists')
self._roles[name] = role
def role(self, name, default=NoDefault):
if default is NoDefault:
return self._roles[name]
return self._roles.get(name, default)
def hasRole(self, name):
return name in self._roles
def delRole(self, name):
del self._roles[name]
def roles(self):
return self._roles
def clearRoles(self):
self._roles = {}
# endregion Roles