zoukankan      html  css  js  c++  java
  • django 基于proxy实现用户权限管理

    项目中经常会遇到用户权限管理的问题,django adminsite已经提供非常实用的用户权限管理机制。不过有些时候,我们希望根据相关用户属性来过滤adminsite中显示的内容。下文将结束如何实现:
    

    原始类

    假设我有这么一个问卷类,基于这个类可以实现增删改查的功能

    
    class wenjuan(models.Model):
        """
        问卷
        """
    
        name=models.CharField(u'问卷名称',max_length=128)
        breif=models.TextField(u'问卷简介')
        zhichixinxi=models.TextField(u'支持信息',default=u'技术支持',null=True,blank=True)
        danwei=models.ForeignKey(Department, verbose_name=u'所属单位')
        status = models.SmallIntegerField(choices=WENJUAN_STATUS, verbose_name=u'状态')
        fabu_time = models.DateTimeField(verbose_name=u'发布日期',null=True,blank=True)
        jiezhi_time = models.DateTimeField(verbose_name=u'截止日期',null=True,blank=True)
        create_time = models.DateTimeField(auto_now=True, verbose_name=u'创建日期',null=True,blank=True)
        cjUser=models.ForeignKey(Users,related_name='users_cj',  verbose_name=u'所属用户',null=True,blank=True)
    
        def __unicode__(self):
            return self.name
    
        class Meta:
            verbose_name = u"问卷"
            verbose_name_plural = verbose_name
            #app_label = _(u'b')
    
    
    

    子类

    基于子类实现根据权限进行不同显示,在demo项目中,我们将实现用户只能查询自己的创建的问卷

    class  chakanWenjuan(wenjuan):
        class Meta:
            proxy=True
            verbose_name=_(u'统计结果')
            verbose_name_plural=_(u'统计结果')
    
    

    xadminx中,我们需要设置一下queryset 过滤

    #-------------------------------------------------
    class chakanWenjuanAdmin(object):
        list_display = ('name','danwei','cjUser',)
        reversion_enable = True
        search_fields = ['name',]
    
        def queryset(self):
            qs = super(chakanWenjuanAdmin, self).queryset()
            if self.user.is_superuser:  
                return qs
            else:
                myuser=Users.objects.get(user__id=self.user.id)
                return qs.filter(cjUser=myuser)
    
    
    xadmin.site.register(chakanWenjuan,chakanWenjuanAdmin)
    

    如果是超级用户,那么全部显示。如果是普通用户,根据user进行筛选。

    预告

    下一篇将介绍,如何在adminsite中自定义列

  • 相关阅读:
    安装vue-cli时-4058报错的解决方法
    Sublime text 3 配置
    Vue项目本地run与build后样式不同,build后样式不生效
    npm run build 打包后,如何运行在本地查看效果(Nginx服务)
    JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)
    JavaScript(ES6)学习笔记-Set和Map数据结构(一)
    Angular
    本地项目与码云上的项目相关联
    获取GitHub上远程分支内容
    MyEclipse
  • 原文地址:https://www.cnblogs.com/springday/p/4940256.html
Copyright © 2011-2022 走看看