BLOG
Enjoy when you can, and endure when you must.
MAR 04, 2014/Django
为Django模型增加自定义的view权限

本文转载并翻译自《Adding a view permission to Django models

在Django中对于每一个请求都会利用Django权限模型来控制对指定对象类型的访问。这在Django看来已经再平常不过了,特别它已经在所有模型上提供了“增加”、“修改”和“删除”等默认权限。

那如何添加我们的“view”权限呢?关于这个问题网上有不少答案,不过还是感觉没什么点睛之笔。经过一番摸索,我发现post_syncdb钩子最适合来完成这项任务。当使用syncdb命令时,所有的内容类型都会检测是否具有“view”权限并在没有的情况下创建。

现在只要抓住这一要点并将相应的代码放在一个应用包management目录下的__init__.py文件中即可。一定要注意放在management文件夹下,否则syncdb的时候是找不到的。

搞定之后,下一次运行syncdb的时候就会自动为每一个对象中增加“view”权限。

from django.db.models.signals import post_syncdb
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission

def add_view_permissions(sender, **kwargs):
    """
    This syncdb hooks takes care of adding a view permission too all our 
    content types.
    """
    # for each of our content types
    for content_type in ContentType.objects.all():
        # build our permission slug
        codename = "view_%s" % content_type.model

        # if it doesn't exist..
        if not Permission.objects.filter(content_type=content_type, codename=codename):
            # add it
            Permission.objects.create(content_type=content_type,
                                      codename=codename,
                                      name="Can view %s" % content_type.name)
            print "Added view permission for %s" % content_type.name

# check for all our view permissions after a syncdb
post_syncdb.connect(add_view_permissions)
COMMENTS
19/06From 雷猴

测试下贵方的评论

29/12From 匆匆那年

赞~解决了我的问题

12/06From jiangning

赞 ~

LEAVE COMMNT