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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
from django.contrib.auth.models import AbstractUser, Group, AnonymousUser
from django.db import models
from django.contrib.auth.models import Group
# quick development/debugging support
from srtgui.api import _log
class SrtUser(AbstractUser):
# add additional fields in here
role = models.CharField(max_length=128, verbose_name='security role')
def __str__(self):
return "%s,%s" % (self.email,self.role)
@property
def is_guest(self):
return self.username == "Guest"
@property
def is_reader(self):
if self.is_superuser:
return True
return self.has_perm('users.Reader')
@property
def is_contributor(self):
if self.is_superuser:
return True
return self.has_perm('users.Contributor')
@property
def is_creator(self):
if self.is_superuser:
return True
return self.has_perm('users.Creator')
@property
def is_admin(self):
if self.is_superuser:
return True
return self.has_perm('users.Admin')
@property
def user_name(self):
return self.username
@property
def user_fullname(self):
if self.first_name or self.last_name:
fullname = '%s %s' % (self.first_name,self.last_name)
return fullname.strip()
else:
return self.username
@property
def get_groups(self):
groups = [ group.name for group in self.groups.all() ]
if not groups:
# Dynamically assign a group if none attached, in particular
# for (super)users created on command line
if self.is_superuser:
command_line_fixup = False
if not self.role:
self.role = "Superuser"
command_line_fixup = True
if not self.last_name:
self.last_name = self.username
command_line_fixup = True
if command_line_fixup:
self.save()
group = Group.objects.get(name = 'Admin')
group.user_set.add(self)
return group.name
else:
group = Group.objects.get(name = 'Reader')
group.user_set.add(self)
return group.name
return ",".join(groups)
@property
def get_group_perm(self):
return self.get_group_permissions()
# Minimal and safe User object to pass to web pages (no passwords)
class UserSafe():
def __init__(self, pk, name, email, role):
self.pk = pk
self.name = name
self.email = email
self.role = role
def __str__(self):
return "UserSafeStr=%d,%s,%s" % (self.pk, self.name, self.email)
@staticmethod
def get_safe_userlist(allow_assignment=True):
user_list = []
for user in SrtUser.objects.all():
if 'SRTool' == user.username:
continue
if allow_assignment and ('Guest' == user.username):
continue
u = UserSafe(user.id,user.username,user.email,user.role)
user_list.append(u)
return user_list
@staticmethod
def is_guest(user_obj):
if isinstance(user_obj,AnonymousUser):
return True
return user_obj.username == "Guest"
@staticmethod
def is_reader(user_obj):
if isinstance(user_obj,AnonymousUser):
return False
return user_obj.is_reader
@staticmethod
def is_contributor(user_obj):
if isinstance(user_obj,AnonymousUser):
return False
return user_obj.is_contributor
@staticmethod
def is_creator(user_obj):
if isinstance(user_obj,AnonymousUser):
return False
return user_obj.is_creator
@staticmethod
def is_admin(user_obj):
if isinstance(user_obj,AnonymousUser):
return False
return user_obj.is_admin
@staticmethod
def user_name(user_obj):
if isinstance(user_obj,AnonymousUser):
return "Guest"
return user_obj.username
|