当前位置: 首页 » 综合知识 » it知识 » 正文

idcops中用户权限与菜单怎么设置

发布时间:2023-07-14 以下文章来源于网友投稿,内容仅供参考!

事实上,Django自带的用户权限管理模块功能已经满足大部分的权限管理场景。

针对普通系统用户的权限控制是非常灵活的,既可以通过组来限制,又可以通过单个用户额外再进行限制。

针对激活的超级用户,会拥有所有权限,会直接返回True以拥有所有权限。下面是从 django.contrib.auth.models.PermissionsMixin 模块源码中找出的代码。

def has_perm(self, perm, obj=None):    """    Return True if the user has the specified permission. Query all    available auth backends, but return immediately if any backend returns    True. Thus, a user who has permission from a single auth backend is    assumed to have permission in general. If an object is provided, check    permissions for that object.    """    # Active superusers have all permissions.    if self.is_active and self.is_superuser:        return True
   # Otherwise we need to check the backends.    return _user_has_perm(self, perm, obj)

在idcops中,我每个模型都给定了初始的默认权限如下:

default_permissions = ('view', 'add', 'change', 'delete', 'export')

对应生成(ModelName为idcops应用下的任意个模型):

idcops.view_ModelName == 查看权限idcops.add_ModelName  == 新建权限idcops.change_ModelName  == 修改权限idcops.delete_ModelName  == 删除权限idcops.export_ModelName  == 导出到Excel表权限


Django中判断一个用户实例是否拥有某种权限:

user.has_perm('idcops.add_online')# 判断用户是否有新建(Online)在线设备的权限

django-idcops构造菜单的代码主要在mixins.py文件中一个叫construct_menus 的函数。代码片段如下:

def construct_menus(user):    model_names = []    for app in apps.get_app_config('idcops').get_models():        opts = app._meta        if has_permission(opts, user, 'view') and \                not getattr(opts, 'hidden', False):            icon_color = 'text-' + opts.icon_color if opts.icon_color else ''            meta = {                'model_name': opts.model_name,                'verbose_name': opts.verbose_name,                'icon': opts.icon,                'icon_color': icon_color,                'level': opts.level,                'group': opts.group            }            model_names.append(meta)    counts = list(set([i.get('level') for i in model_names]))    new_menus = []    for i in counts:        new_menus.append(            [c for c in model_names if c.get('level') == i]        )    return new_menus

上面代码会根据level的不同个数,正序排列生成多个列表,每个列表中对应的元素由字典组成,每个字典包含如下信息:

[  [{    'model_name': 'online', 'verbose_name': '在线设备',    'icon': 'fa fa-server', 'icon_color': 'text-green',    'level': 0, 'group': '设备管理'  },],]

以下是我templates渲染菜单的代码片段:

<section class="sidebar">    <ul class="sidebar-menu" data-widget="tree">        {%for menu in menus%}<li class="header"></li>        {%for m in menu%}        <li{%if '/'|add:m.model_name in request.path %} class="active"{%endif%}>            <a href="/list/{{m.model_name}}/">                <i class="{{m.icon}} {{m.icon_color}}"></i>                <span>{{m.verbose_name}}</span>            </a>        </li>    </ul></section>

这样,便可以根据每个用户是否有读取某个模块的权限来进行动态生成用户菜单到前端页面了。

  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师