Django

Code

Changeset 4100

Show
Ignore:
Timestamp:
11/24/06 23:18:33 (2 years ago)
Author:
adrian
Message:

per-object-permissions: Made some code-formatting changes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/per-object-permissions/django/contrib/admin/media/js/row_level_permission.js

    r3578 r4100  
    11var row_level_permission = { 
    2         copyToNew: function (id) 
    3         { 
     2        copyToNew: function (id)  { 
    43            var newForm = document.getElementById("addRLPForm"); 
    54            var form = document.getElementById("editRLPForm-"+id); 
     
    87            newForm.negative.checked = form.negative.checked; 
    98        }, 
    10          
    11         apply_selected: function () 
    12         { 
     9 
     10        apply_selected: function () { 
    1311                var eleList = document.getElementsByName("apply_checkbox"); 
    1412                var formList = []; 
    15                 for(var i=0; eleList.length; i++) 
     13                for (var i=0; eleList.length; i++) 
    1614                { 
    1715                        var ele = eleList[i]; 
    18                         if(ele.tagName == "INPUT") { 
    19                                 if(ele.checked)       
     16                        if (ele.tagName == "INPUT") { 
     17                                if (ele.checked)
    2018                                        ele.form.submit(); 
    2119                                } 
     
    2422                return false; 
    2523        }, 
    26          
    2724        init: function() { 
    28                  
     25 
    2926        } 
    3027} 
  • django/branches/per-object-permissions/django/contrib/admin/row_level_perm_manipulator.py

    r3767 r4100  
    1111            self.ct = ct 
    1212            perm_list = [(o.id, o.name) for o in self.ct.permission_set.order_by("name")] 
    13              
     13 
    1414        obj_list = [(User, User.objects.order_by("username"))] 
    1515        obj_list.extend([(Group, Group.objects.order_by("name"))]) 
    16          
     16 
    1717        self.fields = ( 
    1818            MultipleObjSelectField(field_name="owner", obj_list=obj_list), 
    19             forms.SelectField(field_name="perm", choices=perm_list),             
     19            forms.SelectField(field_name="perm", choices=perm_list), 
    2020            forms.CheckboxField(field_name="negative"), 
    21            
    22      
     21       
     22 
    2323    def save(self, new_data): 
    24          
    2524        rlp = RowLevelPermission.objects.get(pk=new_data['id']) 
    26          
     25 
    2726        self.original_object = rlp 
    2827        self.manager = rlp._default_manager 
    2928        self.opts = rlp._meta 
    3029 
    31         owner = MultipleObjSelectField.returnObject(new_data['owner'])             
    32         owner_ct = ContentType.objects.get_for_model(owner)     
     30        owner = MultipleObjSelectField.returnObject(new_data['owner']) 
     31        owner_ct = ContentType.objects.get_for_model(owner) 
    3332 
    3433        model_ct = rlp.model_ct 
    3534        model = model_ct.get_object_for_this_type (pk=rlp.model_id) 
    3635        model_id = rlp.model_id 
    37          
     36 
    3837        perm = Permission.objects.get(pk=new_data['perm']) 
    39          
    40          
     38 
    4139        field_name_list = ('owner_ct', 'owner_id', 'model_ct', 'model_id', 'permission') 
    4240        field_data = owner_ct.id 
    43         all_data = {'owner_id':owner.id, 'model_ct_id':model_ct.id, 'model_id':model_id, 'permission_id':perm.id} 
     41        all_data = {'owner_id': owner.id, 'model_ct_id': model_ct.id, 'model_id': model_id, 'permission_id': perm.id} 
    4442        manipulators.manipulator_validator_unique_together(field_name_list, self.opts, self, field_data, all_data) 
    45          
     43 
    4644        rlp.owner = owner 
    4745        rlp.permission = perm 
     
    5957        self.fields = ( 
    6058            MultipleObjSelectField(field_name="owner", obj_list=obj_list, default_text=_("Select an option")), 
    61             forms.SelectMultipleField(field_name="perm", choices=perm_list, size=3),             
     59            forms.SelectMultipleField(field_name="perm", choices=perm_list, size=3), 
    6260            forms.CheckboxField(field_name="negative"), 
    63            
    64      
     61       
     62 
    6563    def save(self, new_data): 
    66          
    6764        owner = MultipleObjSelectField.returnObject(new_data['owner']) 
    6865 
     
    7269        ct = ContentType.objects.get_for_model(owner) 
    7370        rlp_list = [] 
    74         for i in new_data.getlist('perm'): 
     71        for i in new_data.getlist('perm'): 
    7572            perm = Permission.objects.get(pk=i) 
    7673 
    77             #Check that the new row level perms are unique 
     74            # Check that the new row level perms are unique. 
    7875            field_name_list = ('owner_ct', 'owner_id', 'model_ct', 'model_id', 'permission') 
    7976            field_data = ct.id 
    80             model_id = self.obj_instance._get_pk_val()  
    81             all_data = {'owner_id':owner.id, 'model_ct_id':self.ct.id, 'model_id':model_id, 'permission_id':perm.id} 
    82             manipulators.manipulator_validator_unique_together(field_name_list, self.opts, self, field_data, all_data)             
    83              
     77            model_id = self.obj_instance._get_pk_val() 
     78            all_data = {'owner_id': owner.id, 'model_ct_id': self.ct.id, 'model_id': model_id, 'permission_id': perm.id} 
     79            manipulators.manipulator_validator_unique_together(field_name_list, self.opts, self, field_data, all_data) 
     80 
    8481            rlp = RowLevelPermission.objects.create_row_level_permission(self.obj_instance, owner, perm, negative=new_data['negative']) 
    8582            rlp_list.append(rlp) 
    86          
    87         return rlp_list         
    88      
     83 
     84        return rlp_list 
     85 
    8986class MultipleObjSelectField(forms.SelectField): 
    9087    """ 
    9188    Extends a select field to use more then one type of model in a select field. 
    9289    Uses optgroup in the select field to differentiate between object types. 
    93      
     90 
    9491    obj_list should be a list of lists containing the model and a list of objects. 
    9592    E.g. ((User, User.objects.all()), (Group, Group.objects.all)) 
    96      
    97     If you wish to define a default text to be shown as the default option, use the  
     93 
     94    If you wish to define a default text to be shown as the default option, use the 
    9895    default_text parameter. An example of default text would be "Select an option" 
    99      
     96 
    10097    The remaining parameters are very similiar to the normal SelectField. 
    101      
     98 
    10299    To return the object selected pass the string result to MultipleObjSelectField.returnObject(string), 
    103100    it returns the object instance. 
    104      
     101 
    105102    To create a key for a specific object, use: MultipleObjSelectField.returnKey(object). It has an optional 
    106103    parameter for the content type (ct), if you have already determined the content type and want to save on 
    107104    db queries. 
    108105    """ 
    109     def __init__(self, field_name, obj_list=None,  
    110                  default_text=None, size=1, is_required=False, validator_list=None,  
    111                  member_name=None): 
     106    def __init__(self, field_name, obj_list=None, default_text=None, size=1, 
     107            is_required=False, validator_list=None, member_name=None): 
    112108        choice_list = [] 
    113109        self.default_text = default_text 
    114         #Loop through the object list and create the list to be displayed 
     110        # Loop through the object list and create the list to be displayed 
    115111        for obj, obj_choices in obj_list: 
    116112            ct = ContentType.objects.get_for_model(obj) 
    117113            object_choice = [(MultipleObjSelectField.returnKey(o, ct=ct), str(o)) for o in obj_choices] 
    118114            choice_list.extend([(ct.name.title(), object_choice)]) 
    119         super(MultipleObjSelectField, self).__init__(field_name, choices=choice_list,  
    120                                                      size=size, is_required=is_required,  
    121                                                      validator_list=validator_list,  
    122                                                      member_name=member_name)             
     115        super(MultipleObjSelectField, self).__init__(field_name, choices=choice_list, 
     116            size=size, is_required=is_required, validator_list=validator_list, member_name=member_name) 
     117 
    123118    def render(self, data): 
    124119        from django.utils.html import escape 
     
    127122             self.is_required and ' required' or '', self.field_name, self.size)] 
    128123        str_data = str(data) # normalize to string 
    129          
     124 
    130125        if self.default_text: 
    131126            selected_html = '' 
    132127            if not str_data: 
    133128                selected_html = ' selected="selected"' 
    134             output.append('    <option %s>%s</option>' % (selected_html, escape(self.default_text)))             
    135          
     129            output.append('    <option %s>%s</option>' % (selected_html, escape(self.default_text))) 
     130 
    136131        for obj, obj_choices in self.choices: 
    137132            output.append('    <optgroup label="%s">' % (obj,)) 
     
    143138            output.append('    </optgroup>') 
    144139        output.append('  </select>') 
    145         return '\n'.join(output)         
    146          
     140        return '\n'.join(output) 
     141 
    147142    def returnObject(data): 
    148143        data = data.split('/') 
     
    154149        if not ct: 
    155150            ct = ContentType.objects.get_for_model(obj.__class__) 
    156         return ct.app_label+"/"+ct.model+"/"+str(obj.id) 
    157      
     151        return ct.app_label + "/" + ct.model + "/" + str(obj.id) 
     152 
    158153    returnObject = staticmethod(returnObject) 
    159154    returnKey = staticmethod(returnKey) 
    160          
    161          
    162          
  • django/branches/per-object-permissions/django/contrib/admin/templatetags/admin_modify.py

    r4096 r4100  
    129129    def __init__(self, related_object, field_mapping, original): 
    130130        super(TabularBoundRelatedObject, self).__init__(related_object, field_mapping, original) 
    131          
     131 
    132132        self.field_wrapper_list = [FieldWrapper(field) for field in self.relation.editable_fields()] 
    133          
     133 
    134134        fields = self.relation.editable_fields() 
    135          
     135 
    136136        self.form_field_collection_wrappers = [FormFieldCollectionWrapper(field_mapping, fields, i) 
    137137                                               for (i,field_mapping) in self.field_mappings.items() ] 
    138          
     138 
    139139        self.original_row_needed = max([fw.use_raw_id_admin() for fw in self.field_wrapper_list]) 
    140140        if original: 
     
    156156        if original: 
    157157            self.original = original 
    158          
     158 
    159159        self.show_url = original and hasattr(self.relation.opts, 'get_absolute_url') 
    160160 
  • django/branches/per-object-permissions/django/contrib/admin/utils.py

    r3540 r4100  
    101101    for name, urlbase in ROLES.items(): 
    102102        create_reference_role(name, urlbase) 
    103          
    104 #Based off work by Ian Holsman 
    105 #http://svn.zyons.python-hosting.com/trunk/zilbo/common/utils/misc.py 
     103 
     104# Based off work by Ian Holsman 
     105# http://svn.zyons.python-hosting.com/trunk/zilbo/common/utils/misc.py 
    106106 
    107107import sha 
    108 from django.conf import settings  
     108from django.conf import settings 
    109109from django.contrib.contenttypes.models import ContentType 
    110110 
    111 def verify_objref_hash( content_type_id, object_id, hash ): 
     111def verify_objref_hash(content_type_id, object_id, hash_): 
    112112    hash_match = sha.new("%s/%s" % (content_type_id, object_id) + settings.SECRET_KEY).hexdigest() 
    113     if hash == hash_match: 
    114         return True 
    115     else: 
    116         return False 
     113    return hash_ == hash_match 
    117114 
    118115def create_objref(object): 
    119     content_type_id = ContentType.objects.get_for_model( object ).id 
     116    content_type_id = ContentType.objects.get_for_model(object).id 
    120117    object_id = object.id 
    121     return "%s/%d/%s" % ( content_type_id, object_id, sha.new("%s/%d" % (content_type_id, object_id) + settings.SECRET_KEY).hexdigest()) 
     118    return "%s/%d/%s" % (content_type_id, object_id, sha.new("%s/%d" % (content_type_id, object_id) + settings.SECRET_KEY).hexdigest()) 
  • django/branches/per-object-permissions/django/contrib/auth/models.py

    r3940 r4100  
    5050class RowLevelPermissionManager(models.Manager): 
    5151    def create_row_level_permission(self, model_instance, owner, permission, negative=False): 
    52         model_ct=ContentType.objects.get_for_model(model_instance)         
     52        model_ct = ContentType.objects.get_for_model(model_instance) 
    5353        if isinstance(permission, str): 
    54             permission = Permission.objects.get(codename__exact=permission, content_type=model_ct.id) 
     54            permission = Permission.objects.get(codename=permission, content_type=model_ct.id) 
    5555        if model_ct != permission.content_type: 
    56             raise TypeError, "Invalid value: Permission content type(%s) and object content type(%s) do not match" % (permission.content_type, type_ct) 
     56            raise TypeError, "Permission content type (%s) and object content type (%s) do not match" % (permission.content_type, type_ct) 
    5757        model_id = model_instance._get_pk_val() 
    58         rowLvlPerm = self.model(model_id=model_id, model_ct=model_ct
    59                                                  owner_id=owner.id, owner_ct=ContentType.objects.get_for_model(owner), 
    60                                                  permission=permission, negative=negative) 
    61         rowLvlPerm.save() 
    62         return rowLvlPerm 
    63      
     58        row_lvl_perm = self.model(model_id=model_id, model_ct=model_ct, owner_id=owner.id
     59            owner_ct=ContentType.objects.get_for_model(owner), 
     60            permission=permission, negative=negative) 
     61        row_lvl_perm.save() 
     62        return row_lvl_perm 
     63 
    6464    def create_default_row_permissions(self, model_instance, owner, change=True, delete=True, negChange=False, negDel=False): 
    6565        ret_dict = {} 
     
    6767        if change: 
    6868            change_str = "change_%s" % (model_ct.model) 
    69             ret_dict[change_str]=self.create_row_level_permission(model_instance, owner, change_str, negative=negChange) 
     69            ret_dict[change_str] = self.create_row_level_permission(model_instance, owner, change_str, negative=negChange) 
    7070        if delete: 
    7171            delete_str = "delete_%s" % (model_ct.model) 
    72             ret_dict[delete_str]=self.create_row_level_permission(model_instance, owner, delete_str, negative=negDel) 
    73         return ret_dict     
    74      
    75     def get_model_list(self,user, model, perm): 
    76         model_ct=ContentType.objects.get_for_model(model) 
     72            ret_dict[delete_str] = self.create_row_level_permission(model_instance, owner, delete_str, negative=negDel) 
     73        return ret_dict 
     74 
     75    def get_model_list(self, user, model, perm): 
     76        model_ct = ContentType.objects.get_for_model(model) 
    7777        if isinstance(perm, str): 
    7878            perm = Permission.objects.get(codename__exact=perm, content_type=model_ct.id) 
    79         user_model_ids = RowLevelPermission.objects.filter(owner_ct=ContentType.objects.get_for_model(User),  
    80                                           owner_id=user.id, permission=perm.id,  
    81                                           model_ct=model_ct 
    82                                           ).values('model_id')    
    83         id_list = [o['model_id'] for o in user_model_ids]         
    84          
    85         user_group_list = [g['id'] for g in user.groups.select_related().values('id')]         
     79        user_model_ids = RowLevelPermission.objects.filter(owner_ct=ContentType.objects.get_for_model(User), 
     80            owner_id=user.id, permission=perm.id, model_ct=model_ct).values('model_id') 
     81        id_list = [o['model_id'] for o in user_model_ids] 
     82        user_group_list = [g['id'] for g in user.groups.select_related().values('id')] 
    8683        if user_group_list: 
    8784            group_model_ids = RowLevelPermission.objects.filter(owner_ct=ContentType.objects.get_for_model(Group).id, 
    88                                                   owner_id__in=user_group_list, 
    89                                                   model_ct = model_ct 
    90                                                   ).values('model_id') 
    91             id_list=id_list + [o['model_id'] for o in group_model_ids] 
     85                owner_id__in=user_group_list, model_ct = model_ct).values('model_id') 
     86            id_list = id_list + [o['model_id'] for o in group_model_ids] 
    9287        return id_list 
    9388 
    9489class RowLevelPermission(models.Model): 
    95     """  
     90    """ 
    9691    Similiar to permissions but works on instances of objects instead of types. 
    97     This uses generic relations to minimize the number of tables, and connects to the  
     92    This uses generic relations to minimize the number of tables, and connects to the 
    9893    permissions table using a many to one relation. 
    99      
    10094    """ 
    10195    model_id = models.PositiveIntegerField("'Model' ID") 
     
    10599    negative = models.BooleanField() 
    106100    permission = models.ForeignKey(Permission) 
    107      
    108101    model = models.GenericForeignKey(fk_field='model_id', ct_field='model_ct') 
    109102    owner = models.GenericForeignKey(fk_field='owner_id', ct_field='owner_ct') 
    110      
    111103    objects = RowLevelPermissionManager() 
    112      
     104 
    113105    class Meta: 
    114106        verbose_name = _('row level permission') 
    115107        verbose_name_plural = _('row level permissions') 
    116         unique_together = (('model_ct', 'model_id', 'owner_id', 'owner_ct', 'permission'),)         
     108        unique_together = (('model_ct', 'model_id', 'owner_id', 'owner_ct', 'permission'),) 
    117109 
    118110    class Admin: 
     
    121113    def __str__(self): 
    122114        return "%s | %s:%s | %s:%s" % (self.permission, self.owner_ct, self.owner, self.model_ct, self.model) 
    123      
     115 
    124116    def __repr__(self): 
    125117        return "%s | %s:%s | %s:%s" % (self.permission, self.owner_ct, self.owner, self.model_ct, self.model) 
    126  
    127118 
    128119class Group(models.Model): 
     
    180171        help_text=_("In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in.")) 
    181172    user_permissions = models.ManyToManyField(Permission, verbose_name=_('user permissions'), blank=True, filter_interface=models.HORIZONTAL) 
    182      
     173 
    183174    row_level_permissions_owned = models.GenericRelation(RowLevelPermission, object_id_field="owner_id", content_type_field="owner_ct", related_name="owner") 
    184175 
     
    284275 
    285276    def check_row_level_permission(self, permission, object): 
    286         object_ct=ContentType.objects.get_for_model(object) 
     277        object_ct = ContentType.objects.get_for_model(object) 
    287278        if isinstance(permission, str): 
    288279            try: 
    289                 permission = Permission.objects.get(codename__exact=permission, content_type=object_ct.id) 
     280                permission = Permission.objects.get(codename=permission, content_type=object_ct.id) 
    290281            except Permission.DoesNotExist: 
    291282                return False 
    292283        try: 
    293284            model_id = object._get_pk_val() 
    294             row_level_perm=self.row_level_permissions_owned.get(model_id=model_id,  
    295                                                                     model_ct=object_ct.id,  
    296                                                                     permission=permission.id) 
     285            row_level_perm = self.row_level_permissions_owned.get(model_id=model_id, 
     286                model_ct=object_ct.id, permission=permission.id) 
    297287        except RowLevelPermission.DoesNotExist: 
    298288            return self.check_group_row_level_permissions(permission, object) 
     
    300290 
    301291    def check_group_row_level_permissions(self, permission, object): 
    302         #SELECT rlp."negative"  
    303         #FROM "auth_user_groups" ug, "auth_rowlevelpermission" rlp  
    304         #WHERE rlp."owner_id"=ug."group_id"  
    305         #AND ug."user_id"=%s         
    306         #AND rlp."owner_ct_id"=%s 
    307         #AND rlp."model_id"=%s 
    308         #AND rlp."model_ct_id"=%s 
    309         #AND rlp."permission_id"=%s; 
    310292        model_id = object._get_pk_val() 
    311         cursor = connection.cursor()         
     293        cursor = connection.cursor() 
    312294        sql = """ 
    313295            SELECT rlp.%s 
     
    326308            backend.quote_name('model_ct_id'), backend.quote_name('permission_id'), 
    327309            backend.quote_name('negative')) 
    328         cursor.execute(sql, [self.id,  
    329                              ContentType.objects.get_for_model(Group).id,  
     310        cursor.execute(sql, [self.id, 
     311                             ContentType.objects.get_for_model(Group).id, 
    330312                             model_id, 
    331313                             ContentType.objects.get_for_model(object).id, 
    332314                             permission.id,]) 
    333315        row = cursor.fetchone() 
    334  
    335316        if row is None: 
    336317            return None 
    337318        return not row[0] 
    338          
    339319 
    340320    def has_perm(self, perm, object=None): 
     
    345325            return True 
    346326        if object and object._meta.row_level_permissions: 
    347             #Since we use the content type for row level perms, we don't need the application name 
     327            # Since we use the content type for row level perms, we don't need the application name. 
    348328            permission_str = perm[perm.index('.')+1:] 
    349329            row_level_permission = self.check_row_level_permission(permission_str, object) 
     
    361341    def contains_permission(self, perm, model=None): 
    362342        """ 
    363         This checks if the user has the given permission for any instance  
     343        This checks if the user has the given permission for any instance 
    364344        of the given model. 
    365345        """ 
     
    370350            return self.contains_row_level_perm(perm, model) 
    371351        return False 
    372          
     352 
    373353    def contains_row_level_perm(self, perm, model): 
    374354        model_ct = ContentType.objects.get_for_model(model) 
     
    377357        else: 
    378358            permission = perm 
    379         count = self.row_level_permissions_owned.filter(model_ct=model_ct.id, permission=permission.id).count()  
    380  
    381         if count>0: 
     359        count = self.row_level_permissions_owned.filter(model_ct=model_ct.id, permission=permission.id).count() 
     360        if count > 0: 
    382361            return True 
    383         return self.contains_group_row_level_perms(permission, model_ct)         
     362        return self.contains_group_row_level_perms(permission, model_ct) 
    384363 
    385364    def contains_group_row_level_perms(self, perm, ct): 
    386         #SELECT COUNT(*) 
    387          #FROM "auth_user_groups" ug, "auth_rowlevelpermission" rlp, "django_content_type" ct 
    388          #WHERE rlp."owner_id" = ug."group_id" 
    389              #AND ug."user_id"=%s 
    390              #AND rlp."negative" = False 
    391              #AND rlp."owner_ct_id" = %s 
    392              #AND rlp."model_ct_id" = %s 
    393          
    394         cursor = connection.cursor()  
     365        cursor = connection.cursor() 
    395366        sql = """ 
    396367            SELECT COUNT(*) 
     
    402373                AND rlp.%s = %%s 
    403374                AND rlp.%s = %%s""" % ( 
    404             backend.quote_name('auth_user_groups'), backend.quote_name('auth_rowlevelpermission'),  
     375            backend.quote_name('auth_user_groups'), backend.quote_name('auth_rowlevelpermission'), 
    405376            backend.quote_name('django_content_type'), backend.quote_name('owner_id'), 
    406377            backend.quote_name('group_id'), backend.quote_name('user_id'), 
     
    409380        cursor.execute(sql, [self.id, False, ContentType.objects.get_for_model(Group).id, ct.id, perm.id]) 
    410381        count = int(cursor.fetchone()[0]) 
    411         return (count>0) 
     382        return count > 0 
    412383 
    413384    def has_module_perms(self, app_label): 
     
    417388        if self.is_superuser: 
    418389            return True 
    419         if bool(len([p for p in self.get_all_permissions() if p[:p.index('.')] == app_label]))
     390        if [p for p in self.get_all_permissions() if p[:p.index('.')] == app_label]
    420391            return True 
    421392        return self.has_module_row_level_perms(app_label) 
    422393 
    423394    def has_module_row_level_perms(self, app_label): 
    424         #SELECT COUNT(*) 
    425         #FROM "django_content_type" ct, "auth_rowlevelpermission" rlp 
    426         #WHERE rlp."model_ct_id" = ct."id" 
    427             #AND ct."app_label"=%s 
    428             #AND rlp."negative" = False 
    429             #AND rlp."owner_ct_id" = %s 
    430             #AND rlp."owner_id" = %s 
    431         cursor = connection.cursor()         
     395        cursor = connection.cursor() 
    432396        sql = """ 
    433397            SELECT COUNT(*) 
     
    438402                AND rlp.%s = %%s 
    439403                AND rlp.%s = %%s 
    440                 """ % (                     
     404                """ % ( 
    441405            backend.quote_name('django_content_type'), backend.quote_name('auth_rowlevelpermission'), 
    442406            backend.quote_name('model_ct_id'), backend.quote_name('id'), 
    443             backend.quote_name('app_label'),  
     407            backend.quote_name('app_label'), 
    444408            backend.quote_name('owner_ct_id'), 
    445409            backend.quote_name('owner_id'),backend.quote_name('negative'), ) 
    446         #import pdb 
    447         #pdb.set_trace() 
    448         cursor.execute(sql, [app_label, ContentType.objects.get_for_model(User).id, self.id, False])  
     410        cursor.execute(sql, [app_label, ContentType.objects.get_for_model(User).id, self.id, False]) 
    449411        count = int(cursor.fetchone()[0]) 
    450         if count>0: 
     412        if count > 0: 
    451413            return True 
    452414        return self.has_module_group_row_level_perms(app_label) 
    453          
     415 
    454416    def has_module_group_row_level_perms(self, app_label): 
    455         #SELECT COUNT(*) 
    456         #FROM "auth_user_groups" ug, "auth_rowlevelpermission" rlp, "django_content_type" ct 
    457         #WHERE rlp."owner_id" = ug."group_id" 
    458             #AND ug."user_id"=%s 
    459             #AND rlp."model_ct_id" = ct."id" 
    460             #AND ct."app_label"=%s 
    461             #AND rlp."negative" = False 
    462             #AND rlp."owner_ct_id" = %s 
    463         cursor = connection.cursor()  
     417        cursor = connection.cursor() 
    464418        sql = """ 
    465419            SELECT COUNT(*) 
     
    471425                AND rlp.%s = %%s 
    472426                AND rlp.%s = %%s""" % ( 
    473             backend.quote_name('auth_user_groups'), backend.quote_name('auth_rowlevelpermission'),  
     427            backend.quote_name('auth_user_groups'), backend.quote_name('auth_rowlevelpermission'), 
    474428            backend.quote_name('django_content_type'), backend.quote_name('owner_id'), 
    475429            backend.quote_name('group_id'), backend.quote_name('user_id'), 
     
    479433        cursor.execute(sql, [self.id, app_label, False, ContentType.objects.get_for_model(Group).id]) 
    480434        count = int(cursor.fetchone()[0]) 
    481         return (count>0)         
    482              
     435        return (count>0) 
    483436 
    484437    def get_and_delete_messages(self): 
  • django/branches/per-object-permissions/django/contrib/auth/templatetags/auth.py

    r3810 r4100  
    11from django import template 
    22from django.template import loader 
    3 from django.conf import settings  
     3from django.conf import settings 
    44 
    55register = template.Library() 
     
    77def if_has_perm(parser, token): 
    88    """ 
     9    TODO: Update document 
    910 
    10     TODO: Update document 
    11      
    12     Checks permission on the given user. Will check  
    13     row level permissions if an object is given. 
    14      
    15     Note: Perm name should be in the format of [app_label].[perm codename] 
    16          
    17     """     
     11    Checks permission on the given user. Checks row-level permissions if an 
     12    object is given. 
     13 
     14    Perm name should be in the format [app_label].[perm codename]. 
     15    """ 
    1816    tokens = token.split_contents() 
    19     if len(tokens)<2: 
    20         raise template.TemplateSyntaxError, "%r tag requires at least 1 arguments" % tokens[0] 
    21     if len(tokens)>4: 
     17    if len(tokens) < 2: 
     18        raise template.TemplateSyntaxError, "%r tag requires at least 1 argument" % tokens[0] 
     19    if len(tokens) > 4: 
    2220        raise template.TemplateSyntaxError, "%r tag should have no more then 3 arguments" % tokens[0] 
    23      
     21 
    2422    nodelist_true = parser.parse(('else', 'end_'+tokens[0],)) 
    2523    token = parser.next_token() 
     
    2927    else: 
    3028        nodelist_false = template.NodeList() 
    31      
     29 
    3230    object_var = None 
    3331    not_flag = False 
    34     if tokens[1] is "not": 
     32    if tokens[1] == "not": 
    3533        not_flag = True 
    36         permission=tokens[2] 
    37         if len(tokens)>3: 
     34        permission = tokens[2] 
     35        if len(tokens) > 3: 
    3836            object_var = parser.compile_filter(tokens[3]) 
    3937    else: 
    40         permission=tokens[1] 
    41         if len(tokens)>2: 
     38        permission = tokens[1] 
     39        if len(tokens) > 2: 
    4240            object_var = parser.compile_filter(tokens[2]) 
    4341 
    44     if not (permission[0] == permission[-1] and permission[0] in ('"', "'")):             
     42    if not (permission[0] == permission[-1] and permission[0] in ('"', "'")): 
    4543        raise template.TemplateSyntaxError, "%r tag's argument should be in quotes" % tokens[0] 
    46      
     44 
    4745    return HasPermNode(permission[1:-1], not_flag, object_var, nodelist_true, nodelist_false) 
    48      
     46 
    4947class HasPermNode(template.Node): 
    5048    def __init__(self, permission, not_flag, object_var, nodelist_true, nodelist_false): 
     
    7169        return nodes 
    7270 
    73     def render(self, context):    
     71    def render(self, context): 
    7472        if self.object_var: 
    7573            try: 
     
    7977        else: 
    8078            object=None 
    81          
     79 
    8280        try: 
    8381            user = template.resolve_variable("user", context) 
    8482        except template.VariableDoesNotExist: 
    8583            return settings.TEMPLATE_STRING_IF_INVALID 
    86          
     84 
    8785        bool_perm = user.has_perm(self.permission, object=object) 
    8886        if (self.not_flag and not bool_perm) or (not self.not_flag and bool_perm): 
     
    9189            return self.nodelist_false.render(context) 
    9290        return '' 
    93          
     91 
    9492register.tag('if_has_perm', if_has_perm) 
  • django/branches/per-object-permissions/django/db/models/manipulators.py

    r4096 r4100  
    233233                        new_rel_obj.delete() 
    234234                        self.fields_deleted.append('%s "%s"' % (related.opts.verbose_name, old_rel_obj)) 
    235  
    236235 
    237236        # Save the order, if applicable.