OLD | NEW |
1 | 1 |
2 # | 2 # |
3 # TRACKER SCHEMA | 3 # TRACKER SCHEMA |
4 # | 4 # |
5 | 5 |
6 # Class automatically gets these properties: | 6 # Class automatically gets these properties: |
7 # creation = Date() | 7 # creation = Date() |
8 # activity = Date() | 8 # activity = Date() |
9 # creator = Link('user') | 9 # creator = Link('user') |
10 # actor = Link('user') | 10 # actor = Link('user') |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 name=String(), | 64 name=String(), |
65 description=String(), | 65 description=String(), |
66 order=Number()) | 66 order=Number()) |
67 resolution.setkey('name') | 67 resolution.setkey('name') |
68 | 68 |
69 # Keyword | 69 # Keyword |
70 keyword = Class(db, "keyword", | 70 keyword = Class(db, "keyword", |
71 name=String(), | 71 name=String(), |
72 description=String()) | 72 description=String()) |
73 keyword.setkey("name") | 73 keyword.setkey("name") |
74 ················ | 74 |
| 75 # Tag |
| 76 tag = Class(db, "tag", |
| 77 name=String(), |
| 78 description=String()) |
| 79 tag.setkey("name") |
| 80 |
75 | 81 |
76 # User-defined saved searches | 82 # User-defined saved searches |
77 query = Class(db, "query", | 83 query = Class(db, "query", |
78 klass=String(), | 84 klass=String(), |
79 name=String(), | 85 name=String(), |
80 url=String(), | 86 url=String(), |
81 private_for=Link('user')) | 87 private_for=Link('user')) |
82 | 88 |
83 # add any additional database schema configuration here | 89 # add any additional database schema configuration here |
84 | 90 |
(...skipping 29 matching lines...) Expand all Loading... |
114 description=String(indexme='yes'), | 120 description=String(indexme='yes'), |
115 spambayes_score=Number(), | 121 spambayes_score=Number(), |
116 spambayes_misclassified=Boolean(),) | 122 spambayes_misclassified=Boolean(),) |
117 | 123 |
118 # IssueClass automatically gets these properties in addition to the Class ones: | 124 # IssueClass automatically gets these properties in addition to the Class ones: |
119 # title = String() | 125 # title = String() |
120 # messages = Multilink("msg") | 126 # messages = Multilink("msg") |
121 # files = Multilink("file") | 127 # files = Multilink("file") |
122 # nosy = Multilink("user") | 128 # nosy = Multilink("user") |
123 # superseder = Multilink("issue") | 129 # superseder = Multilink("issue") |
| 130 tags_str=String() |
| 131 tags_str.quiet = True |
124 issue = IssueClass(db, "issue", | 132 issue = IssueClass(db, "issue", |
125 type=Link('issue_type'), | 133 type=Link('issue_type'), |
126 components=Multilink('component'), | 134 components=Multilink('component'), |
127 versions=Multilink('version'), | 135 versions=Multilink('version'), |
128 severity=Link('severity'), | 136 severity=Link('severity'), |
129 priority=Link('priority'), | 137 priority=Link('priority'), |
130 dependencies=Multilink('issue'), | 138 dependencies=Multilink('issue'), |
131 assignee=Link('user'), | 139 assignee=Link('user'), |
132 status=Link('status'), | 140 status=Link('status'), |
133 resolution=Link('resolution'), | 141 resolution=Link('resolution'), |
134 superseder=Link('issue'), | 142 superseder=Link('issue'), |
135 keywords=Multilink("keyword"), | 143 keywords=Multilink("keyword"), |
136 stage=Link('stage'), | 144 stage=Link('stage'), |
| 145 tags=Multilink('tag'), |
| 146 tags_str=tags_str, |
137 nosy_count=Number(), | 147 nosy_count=Number(), |
138 message_count=Number()) | 148 message_count=Number()) |
139 | 149 |
140 # | 150 # |
141 # TRACKER SECURITY SETTINGS | 151 # TRACKER SECURITY SETTINGS |
142 # | 152 # |
143 # See the configuration and customisation document for information | 153 # See the configuration and customisation document for information |
144 # about security setup. | 154 # about security setup. |
145 | 155 |
146 db.security.addRole(name='Developer', description='A developer') | 156 db.security.addRole(name='Developer', description='A developer') |
147 db.security.addRole(name='Coordinator', description='A coordinator') | 157 db.security.addRole(name='Coordinator', description='A coordinator') |
148 | 158 |
149 db.security.addPermission(name="SB: May Classify") | 159 db.security.addPermission(name="SB: May Classify") |
150 db.security.addPermission(name="SB: May Report Misclassified") | 160 db.security.addPermission(name="SB: May Report Misclassified") |
151 | 161 |
152 # | 162 # |
153 # REGULAR USERS | 163 # REGULAR USERS |
154 # | 164 # |
155 # Give the regular users access to the web and email interface | 165 # Give the regular users access to the web and email interface |
156 for r in 'User', 'Developer', 'Coordinator': | 166 for r in 'User', 'Developer', 'Coordinator': |
157 db.security.addPermissionToRole(r, 'Web Access') | 167 db.security.addPermissionToRole(r, 'Web Access') |
158 db.security.addPermissionToRole(r, 'Email Access') | 168 db.security.addPermissionToRole(r, 'Email Access') |
159 | 169 |
160 ########################## | 170 ########################## |
161 # User permissions | 171 # User permissions |
162 ########################## | 172 ########################## |
163 | 173 |
164 for cl in ('issue_type', 'severity', 'component', | 174 for cl in ('issue_type', 'severity', 'component', 'tag', |
165 'version', 'priority', 'stage', 'status', 'resolution', | 175 'version', 'priority', 'stage', 'status', 'resolution', |
166 'issue', 'keyword'): | 176 'issue', 'keyword'): |
167 db.security.addPermissionToRole('User', 'View', cl) | 177 db.security.addPermissionToRole('User', 'View', cl) |
168 db.security.addPermissionToRole('Anonymous', 'View', cl) | 178 db.security.addPermissionToRole('Anonymous', 'View', cl) |
169 | 179 |
170 class may_view_spam: | 180 class may_view_spam: |
171 def __init__(self, klassname): | 181 def __init__(self, klassname): |
172 self.klassname = klassname | 182 self.klassname = klassname |
173 | 183 |
174 def __call__(self, db, userid, itemid): | 184 def __call__(self, db, userid, itemid): |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 | 228 |
219 def may_edit_file(db, userid, itemid): | 229 def may_edit_file(db, userid, itemid): |
220 return userid == db.file.get(itemid, "creator") | 230 return userid == db.file.get(itemid, "creator") |
221 p = db.security.addPermission(name='Edit', klass='file', check=may_edit_file, | 231 p = db.security.addPermission(name='Edit', klass='file', check=may_edit_file, |
222 description="User is allowed to remove their own files") | 232 description="User is allowed to remove their own files") |
223 db.security.addPermissionToRole('User', p) | 233 db.security.addPermissionToRole('User', p) |
224 | 234 |
225 p = db.security.addPermission(name='Create', klass='issue', | 235 p = db.security.addPermission(name='Create', klass='issue', |
226 properties=('title', 'type', | 236 properties=('title', 'type', |
227 'components', 'versions', | 237 'components', 'versions', |
228 'severity', | 238 'severity', 'tags_str', |
229 'messages', 'files', 'nosy'), | 239 'messages', 'files', 'nosy'), |
230 description='User can report and discuss issues') | 240 description='User can report and discuss issues') |
231 db.security.addPermissionToRole('User', p) | 241 db.security.addPermissionToRole('User', p) |
232 | 242 |
233 p = db.security.addPermission(name='Edit', klass='issue', | 243 p = db.security.addPermission(name='Edit', klass='issue', |
234 properties=('title', 'type', | 244 properties=('title', 'type', |
235 'components', 'versions', | 245 'components', 'versions', |
236 'severity', | 246 'severity', 'tags_str', |
237 'messages', 'files', 'nosy'), | 247 'messages', 'files', 'nosy'), |
238 description='User can report and discuss issues') | 248 description='User can report and discuss issues') |
239 db.security.addPermissionToRole('User', p) | 249 db.security.addPermissionToRole('User', p) |
240 | 250 |
241 # Allow users to close issues they created | 251 # Allow users to close issues they created |
242 def close_own_issue(db, userid, itemid): | 252 def close_own_issue(db, userid, itemid): |
243 return userid == db.issue.get(itemid, 'creator') | 253 return userid == db.issue.get(itemid, 'creator') |
244 p = db.security.addPermission(name='Edit', klass='issue', | 254 p = db.security.addPermission(name='Edit', klass='issue', |
245 properties=('status',), | 255 properties=('status',), |
246 description='User can close issues he created', | 256 description='User can close issues he created', |
247 check=close_own_issue) | 257 check=close_own_issue) |
248 db.security.addPermissionToRole('User', p) | 258 db.security.addPermissionToRole('User', p) |
249 | 259 |
250 db.security.addPermissionToRole('User', 'SB: May Report Misclassified') | 260 db.security.addPermissionToRole('User', 'SB: May Report Misclassified') |
251 | 261 |
252 | 262 |
253 | 263 |
254 ########################## | 264 ########################## |
255 # Developer permissions | 265 # Developer permissions |
256 ########################## | 266 ########################## |
257 for cl in ('issue_type', 'severity', 'component', | 267 for cl in ('issue_type', 'severity', 'component', 'tag', |
258 'version', 'priority', 'stage', 'status', 'resolution', | 268 'version', 'priority', 'stage', 'status', 'resolution', |
259 'issue', 'file', 'msg', 'keyword'): | 269 'issue', 'file', 'msg', 'keyword'): |
260 db.security.addPermissionToRole('Developer', 'View', cl) | 270 db.security.addPermissionToRole('Developer', 'View', cl) |
261 | 271 |
262 for cl in ('issue', 'file', 'msg', 'keyword'): | 272 for cl in ('issue', 'file', 'msg', 'keyword'): |
263 db.security.addPermissionToRole('Developer', 'Edit', cl) | 273 db.security.addPermissionToRole('Developer', 'Edit', cl) |
264 db.security.addPermissionToRole('Developer', 'Create', cl) | 274 db.security.addPermissionToRole('Developer', 'Create', cl) |
265 | 275 |
266 | 276 |
267 ########################## | 277 ########################## |
(...skipping 30 matching lines...) Expand all Loading... |
298 description="User is allowed to edit their own user details", | 308 description="User is allowed to edit their own user details", |
299 properties=('username', 'password', | 309 properties=('username', 'password', |
300 'address', 'realname', | 310 'address', 'realname', |
301 'phone', 'organisation', | 311 'phone', 'organisation', |
302 'alternate_addresses', | 312 'alternate_addresses', |
303 'queries', | 313 'queries', |
304 'timezone')) # Note: 'roles' excluded - users should not be able
to edit their own roles.· | 314 'timezone')) # Note: 'roles' excluded - users should not be able
to edit their own roles.· |
305 for r in 'User', 'Developer': | 315 for r in 'User', 'Developer': |
306 db.security.addPermissionToRole(r, p) | 316 db.security.addPermissionToRole(r, p) |
307 | 317 |
| 318 # Tags |
| 319 p = db.security.addPermission(name='Create', klass='tag', |
| 320 description="User is allowed to create tags") |
| 321 for r in 'User', 'Developer', 'Coordinator': |
| 322 db.security.addPermissionToRole(r, p) |
| 323 |
308 # Users should be able to edit and view their own queries. They should also | 324 # Users should be able to edit and view their own queries. They should also |
309 # be able to view any marked as not private. They should not be able to | 325 # be able to view any marked as not private. They should not be able to |
310 # edit others' queries, even if they're not private | 326 # edit others' queries, even if they're not private |
311 def view_query(db, userid, itemid): | 327 def view_query(db, userid, itemid): |
312 private_for = db.query.get(itemid, 'private_for') | 328 private_for = db.query.get(itemid, 'private_for') |
313 if not private_for: return True | 329 if not private_for: return True |
314 return userid == private_for | 330 return userid == private_for |
315 def edit_query(db, userid, itemid): | 331 def edit_query(db, userid, itemid): |
316 return userid == db.query.get(itemid, 'creator') | 332 return userid == db.query.get(itemid, 'creator') |
317 p = db.security.addPermission(name='View', klass='query', check=view_query, | 333 p = db.security.addPermission(name='View', klass='query', check=view_query, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 # [OPTIONAL] | 375 # [OPTIONAL] |
360 # Allow anonymous users access to create or edit "issue" items (and the | 376 # Allow anonymous users access to create or edit "issue" items (and the |
361 # related file and message items) | 377 # related file and message items) |
362 #for cl in 'issue', 'file', 'msg': | 378 #for cl in 'issue', 'file', 'msg': |
363 # db.security.addPermissionToRole('Anonymous', 'Create', cl) | 379 # db.security.addPermissionToRole('Anonymous', 'Create', cl) |
364 # db.security.addPermissionToRole('Anonymous', 'Edit', cl) | 380 # db.security.addPermissionToRole('Anonymous', 'Edit', cl) |
365 | 381 |
366 | 382 |
367 # vim: set filetype=python sts=4 sw=4 et si : | 383 # vim: set filetype=python sts=4 sw=4 et si : |
368 | 384 |
OLD | NEW |