我想在我的Django应用中为每个模型添加can_view
Meta权限。
我想把它添加到models.py
class Meta:
permissions = [ ( "can_view", "Can view {something}".format( something = self.verbose_name ) ]
我甚至不确定self.verbose_name
在这种情况下是否会像那样工作....
这可能吗?
加分问题:在模型Meta
中添加权限后,我可以用has_perm
调用它吗?像
if request.user.has_perm( 'polls.can_view' ) :
# Show a list of polls.
else :
# Say "Insufficient permissions" or something.
答案 0 :(得分:5)
权限也是一个正常的Django模型实例。您可以像任何其他模型一样创建它。
所以你需要像
这样的东西from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
for content_type in ContentType.objects.all():
Permission.objects.create(content_type=content_type, codename='view_%s' % content_type.model, name='Can view %s' % content_type.name)
你需要做一次,所以post_syncdb信号看起来是个好地方。
答案 1 :(得分:1)
最简单明了的方法是自定义基本模型,它是所有模型的父级。这样你(或其他程序员)就会想知道can_view
来自哪里。
class CustomBaseModel(models.Model):
class Meta:
abstract = True
permissions = [ ( "can_view", "Can view {something}".format( something = self.verbose_name ) ]
class SomeModel(CustomBaseModel):
# ...
但是,这需要您更改所有模型(这可以通过一点点搜索和替换轻松完成),并且不会更改Djangos内置模型(如User
)。