Django permissions and Groups

Reading Time : ~ .

Permissions:

Actually permissions are of 2 types:

    1.Model level permissions
    2.object level permissions

If you want to give permissions on all cars, then Model-level is appropriate, but if you want to give permissions on a per-car basis you want Object-level. You may need both, and this isn't a problem as we'll see.

For Model permissions, Django will create permissions in the form 'appname.permissionname_modelname' for each model. If you have an app called 'drivers' with the Car model then one permission would be 'drivers.delete_car'. The permissions that Django automatically creates will be create, change, and delete.Read permission is not included in CRUD operation.Django decided to change CRUD's 'update' to 'change' for some reason. To add more permissions to a model, say read permissions, you use the Meta class:

class Book( models.Model ):

    # model stuff here

    class Meta:

        permissions = ( 

            ( "read_book", "Can read book" ),

        )

Permissions is a set of tuples, where the tuple items are the permission as described above and a description of that permission.

Finally, to check permissions, you can use has_perm:

obj.has_perm( 'drivers.read_car' )

Where obj is either a User or Group instance.

Here is some example which is used to check permissions 'perms' of a model object called entity in the app

def has_model_permissions( entity, model, perms, app ):

    for p in perms:

        if not entity.has_perm( "%s.%s_%s" % ( app, p, model.__name__ ) ):

            return False

        return True

Where entity is the object to check permissions on (Group or User), model is the instance of a model, perms is a list of permissions as strings to check (e.g. ['read', 'change']), and app is the application name as a string. To do the same check as has_perm above you'd call something like this:

result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )

We are having 3 default permissions which will be created when we run ./manage.py runserver.These permissions will be created for each models in a project.

add: user.has_perm('drivers.add_book')

change: user.has_perm('drivers.change_book')

delete: user.has_perm('drivers.delete_book')

Groups:

With the help of model django.contrib.auth.models.Group,we can categorizing users so you can apply permissions to group(all users)... 
For example, if the group Book, author has the permission can_edit_home_page, any user in that group will have that permission. 

from myapp.models import Book

from django.contrib.auth.models import Group, Permission

from django.contrib.contenttypes.models import ContentType content_type = ContentType.objects.get_for_model(Book)

permission = Permission.objects.create(codename='can_publish',

                                       name='Can Publish book',

                                       content_type=content_type)

We can directly add a permission to a user using user_permissions and to a group using permissions attribute.

    By Posted On
SENIOR DEVELOPER at MICROPYRAMID

Need any Help in your Project?Let's Talk

Latest Comments
Related Articles
Export html web page to pdf using jspdf Vidyasagar Rudraram

jsPDF is used to generate pdf files in client-side Javascript. You can find the links for jsPDF here and also you can find the link ...

Continue Reading...
Integration of 2checkout with django Nikhila Mergu

Payment Gateways which facilitate communication within banks and Security is an integral component of all payment gateways, as sensitive data such as Credit Card Numbers ...

Continue Reading...
Factory Boy - An alternative for Fixtures Shirisha Gaddi

Factory Boy is a fixtures replacement tool. It allows you to use objects customized for the current test, while only declaring the test-specific fields. For ...

Continue Reading...

Subscribe To our news letter

Subscribe to our news letter to receive latest blog posts into your inbox. Please fill your email address in the below form.
*We don't provide your email contact details to any third parties