温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-06-01 16:53:17 来源:亿速云 阅读:127 作者:iii 栏目:大数据

本文小编为大家详细介绍“idcops中用户权限与菜单怎么设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“idcops中用户权限与菜单怎么设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

事实上,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>

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

读到这里,这篇“idcops中用户权限与菜单怎么设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI