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中自定义列

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值