本文转载并翻译自《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)
测试下贵方的评论
赞~解决了我的问题
赞 ~