爱调研

网络调查社区,使用 Django ...

↑我也要推荐

给 Django Admin 添加 read only 权限

发布时间:2011-06-29 05:12:13, 关注:+10810, 赞美:+16, 不爽:+23

原始出处: Forrest Liu's Blog

项目中曾经遇到过需要给django admin添加只读权限的功能。但是django自带的权限目前只有add,change,delete三种权限。当时找了下django doc 发现django自带的一个app叫 Databrowse 也提供数据只读的功能,不过个人觉得有点不太给力,鸡肋。所以就自己实现了read only权限。

通过查看django源代码我们可以看到权限是在ModelAdmin中定义的,所以我们只需继承ModelAdmin并添加read only权限即可。

在项目app下创建custom_model_admin.py

代码如下:

from django.contrib import admin
from django.contrib.auth.models import Permission


class CustomModelAdmin(admin.ModelAdmin):
   
    def has_view_permission(self, request, obj=None):
        opts = self.opts
        view_permission = 'view_%s' %self.model._meta.module_name
        return request.user.has_perm(opts.app_label + '.' + view_permission)
   
    def has_change_permission(self, request, obj=None):
        if hasattr(self,'has_change'):
            if self.has_change:
                return True
       
        return super(CustomModelAdmin,self).has_change_permission(request, obj)
       
    def get_model_perms(self, request):
        value = super(CustomModelAdmin,self).get_model_perms(request)
        value['view'] = self.has_view_permission(request)
        return value
   
    def changelist_view(self, request, extra_context=None):
        if self.has_view_permission(request, None):
            self.has_change = True
        result = super(CustomModelAdmin,self).changelist_view(request, extra_context)
        self.has_change = False
        return result 

 代码很短,就不过多讲解了,参考django\contrib\admin\options.py

可直接在自己的项目中使用,注册admin时只需继承CustomModelAdmin即可,例如:

from django.contrib import admin
from your_app.custom_model_admin import CustomModelAdmin
from models import *

class YourModelAdmin(CustomModelAdmin):
    list_filter = ('status',)
    list_display = ('username', 'email','status','last_login','from_ip',)
    search_fields = ('username', 'email',)
    ordering = ['-id']

admin.site.register(YourModel, ComUserAdmin) 

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠