1
2 from baseObjects import User
3 from c3errors import ConfigFileException
4 from utils import getFirstData, elementType
5 import md5, crypt
6
8 simpleNodes = ["username", "password", "email", "address", "tel", "realName", "description", "passwordType"]
9 username = ""
10 password = ""
11 email = ""
12 address =""
13 tel = ""
14 realName = ""
15 description = ""
16 flags = {}
17
18 allFlags = {"c3r:administrator" : "Administrator flag. Inherits all others.",
19 "info:srw/operation/1/create" : "Create record within this store",
20 "info:srw/operation/1/replace" : "Replace existing record within store",
21 "info:srw/operation/1/delete" : "Delete existing record from store",
22 "info:srw/operation/1/metadata" : "Modify metadata of record within store",
23 "info:srw/operation/2/index" : "Run indexing process for this object",
24 "info:srw/operation/2/unindex" : "Run un-indexing process for this object",
25 "info:srw/operation/2/cluster" : "Run clustering process for this object",
26 "info:srw/operation/2/permissions" : "Permission to change permissions",
27 "info:srw/operation/2/search" : "Permission to search",
28 "info:srw/operation/2/retrieve" : "Permission to retrieve object",
29 "info:srw/operation/2/scan" : "Permission to scan",
30 "info:srw/operation/2/sort" : "Permission to sort result set",
31 "info:srw/operation/2/transform" : "Permission to transform record"
32 }
33
34
35 resultSetIds = []
36
38 if (node.localName in self.simpleNodes):
39 setattr(self, node.localName, getFirstData(node))
40 elif (node.localName == "flags"):
41
42
43 for c in node.childNodes:
44 if c.nodeType == elementType and c.localName == "flag":
45 obj = None
46 flag = None
47 for c2 in c.childNodes:
48 if c2.nodeType == elementType:
49 if c2.localName == "object":
50 obj = getFirstData(c2)
51 elif c2.localName == "value":
52 flag = getFirstData(c2)
53 if not self.allFlags.has_key(flag) and flag[:4] != "c3fn":
54 raise ConfigFileException("Unknown flag: %s" % flag)
55 if obj == None or flag == None:
56 raise ConfigFileException("Missing object or value element for flag for user %s" % self.username)
57 if (obj):
58 f = self.flags.get(flag, [])
59 if f != "":
60 f.append(obj)
61 self.flags[flag] = obj
62 else:
63 self.flags[flag] = ""
64 elif (node.localName == "history"):
65
66 pass
67 elif (node.localName == "hostmask"):
68
69 pass
70
71 - def hasFlag(self, session, flag, object=""):
72
73 f = self.flags.get(flag, [])
74 if f == "c3r:administrator" or object in f:
75 return True
76 else:
77
78 f = self.flags.get("", [])
79 if f == "c3r:administrator" or object in f:
80 return True
81 return False
82
90