溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

idcops中用戶權限與菜單怎么設置

發布時間:2022-06-01 16:53:17 來源:億速云 閱讀:170 作者: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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女