项目中经常会遇到用户权限管理的问题,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实现用户权限管理的更多相关文章

  1. 基于EasyUI Treegrid的权限管理资源列表

    1. 前言 最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块.之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快.以前用到 ...

  2. RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.8 用户权限管理 -Web部分 在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色.用 ...

  3. Jenkins配置基于角色的项目权限管理--转

    本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理. 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Str ...

  4. Jenkins配置基于角色的项目权限管理

    转自: http://www.cnblogs.com/gao241/archive/2013/03/20/2971416.html, 版权归原作者. 本文将介绍如何配置jenkins,使其可以支持基于 ...

  5. vue基于d2-admin的RBAC权限管理解决方案

    前两篇关于vue权限路由文章的填坑,说了一堆理论,是时候操作一波了. vue权限路由实现方式总结 vue权限路由实现方式总结二 选择d2-admin是因为element-ui的相关开源项目里,d2-a ...

  6. 基于Proxy的小程序状态管理

    摘要: 小程序状态管理. 作者:wwayne 原文:基于Proxy的小程序状态管理 Fundebug经授权转载,版权归原作者所有. 微信小程序的市场在进一步的扩大,而背后的技术社区仍在摸索着最好的实践 ...

  7. ClickHouse学习系列之二【用户权限管理】

    背景 最近花了些时间看了下ClickHouse文档,发现它在OLAP方面表现很优异,而且相对也比较轻量和简单,所以准备入门了解下该数据库系统.在安装完之后首先做的应该如何设置用户密码以及权限控制.因为 ...

  8. (十三)整合 SpringSecurity 框架,实现用户权限管理

    整合 SpringSecurity 框架,实现用户权限管理 1.Security简介 1.1 基础概念 1.2 核心API解读 2.SpringBoot整合SpringSecurity 2.1 流程描 ...

  9. jenkins配置基于角色的项目权限管理设置步骤

    jenkins配置基于角色的项目权限管理设置步骤 本文链接:https://blog.csdn.net/russ44/article/details/52276222 由于jenkins默认的权限管理 ...

随机推荐

  1. C#--参数数组

  2. c# 指定的存储区提供程序在配置中找不到,或者无效

    <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite"/ ...

  3. C#读取配置文件的几种方式

    配置文件 <?xml version="1.0" encoding="utf-8" ?> <configuration> <con ...

  4. C# 6.0的字典(Dictionary)的语法

    在C# 6.0,当我们使用Dictionary时,我们可以使用新语法,来去简化程序以提高效率. public Dictionary<string, object> OldToolLocat ...

  5. Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”

    项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...

  6. Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...

  7. Android Volley框架的使用(1)

    在Android开发中,经常要通过HTTP请求访问网络.为了使通过HTTP请求访问网络的过程更加简单,2013年提出了新的HTTP通信框架--Volley.Volley使用起来非常简单,适用于网络访问 ...

  8. Java的HashSet类

    如果要查找一个集合中是否包含了某个对象,那么就需要把这个对象和这个集合中的每个对象依次进行比较和判断,直到找到这个对象为止,或者把所有对象都比较一次为止(如果最后一个对象才是要查找的对象,或者集合中没 ...

  9. 使用MySQL Workbench导出MySQL数据库关系图

    1. 点击MySQL Workbench中间Data Modeling下的Create EER Model From Existing Database: 2. 在Stored Connection中 ...

  10. JAVA中的输入方法

    输入整数(int)类型 导入包 import java.io.*; 输入语句 BufferedReader myIn=new BufferedReader(new inputStreamReader( ...