changeset 3013:80ecc86dc45d maint-0.8

merge from HEAD
author Richard Jones <richard@users.sourceforge.net>
date Wed, 15 Dec 2004 00:07:58 +0000
parents c49d0724fc3c
children e4bac783c617
files CHANGES.txt roundup/cgi/actions.py templates/classic/html/issue.search.html templates/classic/html/page.html
diffstat 4 files changed, 22 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES.txt	Tue Dec 14 23:32:55 2004 +0000
+++ b/CHANGES.txt	Wed Dec 15 00:07:58 2004 +0000
@@ -7,6 +7,7 @@
 - fix API for templating utils extensions - remove "utils" arg (sf bug 1081981)
 - back_sqlite.py is missing "import time" (sf bug 1081959)
 - fix (list) popup (sf bug 1083570)
+- fix some security assertions (sf bug 1085481)
 
 
 2004-12-08 0.8.0b1
--- a/roundup/cgi/actions.py	Tue Dec 14 23:32:55 2004 +0000
+++ b/roundup/cgi/actions.py	Wed Dec 15 00:07:58 2004 +0000
@@ -1,4 +1,4 @@
-#$Id: actions.py,v 1.40 2004-11-23 22:45:13 richard Exp $
+#$Id: actions.py,v 1.40.2.1 2004-12-15 00:03:36 richard Exp $
 
 import re, cgi, StringIO, urllib, Cookie, time, random
 
@@ -59,12 +59,12 @@
                 '%(action)s the %(classname)s class.')%info
 
     _marker = []
-    def hasPermission(self, permission, classname=_marker):
+    def hasPermission(self, permission, classname=_marker, itemid=None):
         """Check whether the user has 'permission' on the current class."""
         if classname is self._marker:
             classname = self.client.classname
         return self.db.security.hasPermission(permission, self.client.userid,
-            classname)
+            classname=classname, itemid=itemid)
 
     def gettext(self, msgid):
         """Return the localized translation of msgid"""
@@ -158,9 +158,16 @@
                 # edit the old way, only one query per name
                 try:
                     qid = self.db.query.lookup(queryname)
+                    if not self.hasPermission('Edit', self.classname,
+                            itemid=qid):
+                        raise exceptions.Unauthorised, self._(
+                            "You do not have permission to edit queries")
                     self.db.query.set(qid, klass=self.classname, url=url)
                 except KeyError:
                     # create a query
+                    if not self.hasPermission('Create', self.classname):
+                        raise exceptions.Unauthorised, self._(
+                            "You do not have permission to store queries")
                     qid = self.db.query.create(name=queryname,
                         klass=self.classname, url=url)
             else:
@@ -180,9 +187,16 @@
                     for qid in qids:
                         if queryname != self.db.query.get(qid, 'name'):
                             continue
+                        if not self.hasPermission('Edit', self.classname,
+                                itemid=qid):
+                            raise exceptions.Unauthorised, self._(
+                            "You do not have permission to edit queries")
                         self.db.query.set(qid, klass=self.classname, url=url)
                 else:
                     # create a query
+                    if not self.hasPermission('Create', self.classname):
+                        raise exceptions.Unauthorised, self._(
+                            "You do not have permission to store queries")
                     qid = self.db.query.create(name=queryname,
                         klass=self.classname, url=url, private_for=uid)
 
@@ -468,7 +482,7 @@
                     "You do not have permission to edit user roles")
             if self.isEditingSelf():
                 return 1
-        if self.hasPermission('Edit'):
+        if self.hasPermission('Edit', itemid=self.nodeid):
             return 1
         return 0
 
--- a/templates/classic/html/issue.search.html	Tue Dec 14 23:32:55 2004 +0000
+++ b/templates/classic/html/issue.search.html	Wed Dec 15 00:07:58 2004 +0000
@@ -180,7 +180,7 @@
 </td>
 </tr>
 
-<tr>
+<tr tal:condition="python:request.user.hasPermission('Edit', 'query')">
 <th i18n:translate="">Query name**:</th>
 <td><input name="@queryname"
            tal:attributes="value request/form/@queryname/value | default"></td>
--- a/templates/classic/html/page.html	Tue Dec 14 23:32:55 2004 +0000
+++ b/templates/classic/html/page.html	Wed Dec 15 00:07:58 2004 +0000
@@ -24,7 +24,8 @@
 
 <tr>
  <td rowspan="2" valign="top" class="sidebar">
-  <p class="classblock">
+  <p class="classblock"
+     tal:condition="python:request.user.hasPermission('View', 'query')">
    <span i18n:translate=""
     ><b>Your Queries</b> (<a href="query?@template=edit">edit</a>)</span><br>
    <tal:block tal:repeat="qs request/user/queries">

Roundup Issue Tracker: http://roundup-tracker.org/