django 基于proxy实现用户权限管理
2015-11-05 17:32
721 查看
项目中经常会遇到用户权限管理的问题,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中自定义列相关文章推荐
- django 基于proxy实现用户权限管理
- 社会工程学教程讲座之Google黑客技术
- Django ORM 入坑记录
- Mongo db.getMongo().setSlaveOk()
- GoldenGate: Extract Abend with Detect Inconsistency in Pdata (文档 ID 1355067.1)
- Intent中的四个重要属性——Action、Data、Category、Extras
- poj 2940 Wine Trading in Gergovia 贪心+扫描
- mrjob 使用 mongoldb 数据源【转】
- 关键字爬google的pdf
- ubuntu sougou输入法
- HDU 5512 Pagodas
- google书签找回
- 数据签名标准算法-DSA (Digital signature Algorithm DSA)
- MTK6572 开机logo 和开机动画配置
- Django自带过滤器总结
- Algorithm Gossip: 得分排行
- Algorithm Gossip: 约瑟夫问题(Josephus Problem)
- Algorithm Gossip: 背包问题(Knapsack Problem)
- URAL 1534 Football in Gondor