xadmin 添加自定义权限

Posted wtil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xadmin 添加自定义权限相关的知识,希望对你有一定的参考价值。

1.设置一个代理模型

# 普通模型
class Goods(models.Model):
    pass

# 代理模型
class ClaimGoods(Goods):
    class Meta:
        verbose_name = "代理模型"
        verbose_name_plural = verbose_name
        proxy = True  # 设置为True 否则会重新注册一张数据表

2.注册模型

 

class ClaimGoodsAdmin(GoodsInfoModelAdmin):
    # reversion_enable = True
    actions = [ClaimAction, ]

    def get_list_queryset(self):
        queryset = super().get_list_queryset()
        queryset = queryset.filter(belonger__isnull=True)
        return self.level_queryset(queryset)

    def get_permission_codename(self, action, opts):
        """
        Return the codename of the permission for the specified action.
        """
        return %s_%s % (action, opts.model_name)

    def has_view_permission(self, obj=None):
        flag = super(ClaimGoodsAdmin, self).has_view_permission(obj)
        view_codename = self.get_permission_codename(view, self.opts)  # 查看权限代码
        change_codename = self.get_permission_codename(change, self.opts)  # 修改权限代码
        del_codename = self.get_permission_codename(delete, self.opts)  # 删除权限代码
        add_codename = self.get_permission_codename(add, self.opts)  # 添加权限代码
        print(view_codename, del_codename, add_codename, change_codename)
        return flag


xadmin.site.register(ClaimGoods, ClaimGoodsAdmin)

 

 

 

 

2.因为代理模型Xadmin不会自动识别权限,所以需要手动添加

  1.首先查询权限代码

# 在注册的时候重写这两个方法
    def get_permission_codename(self, action, opts):
        """
        Return the codename of the permission for the specified action.
        """
        return %s_%s % (action, opts.model_name)

    def has_view_permission(self, obj=None):
        flag = super(ClaimGoodsAdmin, self).has_view_permission(obj)
        view_codename = self.get_permission_codename(view, self.opts)  # 查看权限代码
        change_codename = self.get_permission_codename(change, self.opts)  # 修改权限代码
        del_codename = self.get_permission_codename(delete, self.opts)  # 删除权限代码
        add_codename = self.get_permission_codename(add, self.opts)  # 添加权限代码
        print(view_codename, del_codename, add_codename, change_codename)
        return flag

 

  2.在后台添加权限(代码名称我改了没效果,会跟父类模型权限名称重名,不知道怎么解决,不过权限控制是可以正常实现的)

技术图片

 

  

 

以上是关于xadmin 添加自定义权限的主要内容,如果未能解决你的问题,请参考以下文章

xadmin 自定义模板

自定义的Xadmin,并且添加额外的url

xadmin----内置插件

xadmin设置

Django+xadmin打造在线教育平台

django-xadmin常用内容记录