欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理

 更新時(shí)間:2022年09月16日 08:35:16   作者:_Congratulate  
這篇文章主要為大家介紹了vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

方案1:數(shù)組+自定義指令

把權(quán)限放到數(shù)組中,通過vue的自定義指令來(lái)判斷是否擁有該權(quán)限,有則顯示,反之則不顯示

我們可以把這個(gè)按鈕需要的權(quán)限放到組件上

<el-button
  v-hasPermi="['home:advertising:update']"
>新建</el-button>

自定義指令:

邏輯就是我們?cè)诘顷懞髸?huì)獲取該用戶的權(quán)限,并存儲(chǔ)到localStorage中,當(dāng)一個(gè)按鈕展示時(shí)會(huì)判斷l(xiāng)ocalStorage存儲(chǔ)的權(quán)限列表中是否存在該按鈕所需的權(quán)限。

/**
 * 權(quán)限處理
 */
?
export default {
  inserted(el, binding, vnode) {
    const { value } = binding;
    const SuperPermission = "superAdmin"; // 超級(jí)用戶,用于開發(fā)和測(cè)試
    const permissions = localStorage.getItem('userPermissions')&& localStorage.getItem('userPermissions').split(',');
    // 判斷傳入的組件權(quán)限是否符合要求
    if (value && value instanceof Array && value.length > 0) {
      const permissionFlag = value;
      const hasPermissions = permissions && permissions.some(permission => all_permission === permission || permissionFlag.includes(permission));
      // 判斷是否有權(quán)限是否要展示
      if (!hasPermissions) {
        el.parentNode && el.parentNode.removeChild(el);
      }
    } else {
      throw new Error(`請(qǐng)?jiān)O(shè)置操作權(quán)限標(biāo)簽值`);
    }
  },
};

注冊(cè)權(quán)限

import Vue from 'vue';
import Vpermission from "./permission";
// 按鈕權(quán)限 自定義指令
Vue.directive('permission', Vpermission);

關(guān)于路由權(quán)限

數(shù)組的方案也可以用到菜單權(quán)限上,可以在路由的meta中攜帶該路由所需的權(quán)限,例如:

const router = [{
  path: 'needPermissionPage',
  name: 'NeedPermissionPage',
  meta: {
    role: ['permissionA', 'permissionB'],
  },
}]

這個(gè)時(shí)候就需要在渲染權(quán)限的時(shí)候動(dòng)態(tài)渲染了,該方案可以看一下其他的文章或成熟的項(xiàng)目,寫的非常好

方案2: 二進(jìn)制

通過二進(jìn)制來(lái)控制權(quán)限:

假設(shè)我們有增刪改查四個(gè)基本權(quán)限:

const UPDATE = 0b000001;
const DELETE = 0b000010;
const ADD = 0b000100;
const SEARCH = 0b001000;

每一位代表是否有該權(quán)限,有該權(quán)限則是1,反之是0

表達(dá)權(quán)限:

我們可以使用或運(yùn)算來(lái)表達(dá)一個(gè)權(quán)限結(jié)果,或運(yùn)算:兩個(gè)任何一個(gè)為1,結(jié)果就為1

const reslut = UPDATE | DELETE | SEARCH;
console.log(reslut);  // 11

變成了十進(jìn)制,我們可以通過toString方法變?yōu)槎M(jìn)制結(jié)果

const reslut = UPDATE | DELETE | SEARCH;
console.log(reslut.toString(2));  // 1011

result 這個(gè)結(jié)果就代表我們既擁有更新權(quán)限,同時(shí)也擁有刪除和查詢的權(quán)限

那么我們可以將十進(jìn)制的reslut當(dāng)作該用戶的權(quán)限,把這個(gè)結(jié)果給后臺(tái),下次用戶登陸后只需要返回這個(gè)結(jié)果就可以了。

權(quán)限判斷

我們了解了如何表達(dá)一個(gè)權(quán)限,那如何做權(quán)限的判斷呢?

可以通過且運(yùn)算,且運(yùn)算:兩位都為1,這一位的結(jié)果才是1。

還是用上面的結(jié)果,當(dāng)我們從接口中拿到了reslut,判斷他是否有 DELETE 權(quán)限:

console.log((reslut & DELETE) === DELETE);  // true

是否有新增的權(quán)限

console.log((result & ADD) === ADD); // false

判斷和使用

/**
 * 接受該組件所需的權(quán)限,返回用戶權(quán)限列表是否有該權(quán)限
 * @param {String} permission 
 * @returns {Boolean}
 */
function hasPermission(permission) {
  const permissionList = {
    UPDATE: 0b000001,
    DELETE: 0b000010,
    CREATE: 0b000100,
    SEARCH: 0b001000
  }
  let btnPermission = permissionList[permission] ? permissionList[permission] : -1;
  if (btnPermission === -1) return false;
  const userPermission = localStorage.getItem('userPermissions');
  // 將本地十進(jìn)制的值轉(zhuǎn)換為二進(jìn)制
  const userPermissionBinary = userPermission.toString(2);
  // 對(duì)比組件所需權(quán)限和本地存儲(chǔ)的權(quán)限
  return (userPermissionBinary & btnPermission) === btnPermission;
}

直接在組件中通過v-show/v-if來(lái)控制是否展示

<el-button v-show="hasPermission('UPDATE')">更新</el-button>

小結(jié)

我理解來(lái)說,對(duì)于方案1來(lái)說,方案2的優(yōu)勢(shì)在于更簡(jiǎn)潔,后臺(tái)僅需要存儲(chǔ)一個(gè)十進(jìn)制的值,但如果后期新增需求更新了新的權(quán)限,可能需要調(diào)整二進(jìn)制的位數(shù)來(lái)滿足業(yè)務(wù)需求。方案1的優(yōu)勢(shì)在于更加易懂,新增權(quán)限時(shí)僅需要更新組件自定義指令的數(shù)組。

以上就是vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理的詳細(xì)內(nèi)容,更多關(guān)于vue 前端按鈕組件權(quán)限的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue極簡(jiǎn)生成器?Vuepress的實(shí)現(xiàn)

    Vue極簡(jiǎn)生成器?Vuepress的實(shí)現(xiàn)

    本文主要介紹了Vue極簡(jiǎn)生成器?Vuepress的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-06-06
  • Vue中Quill富文本編輯器的使用教程

    Vue中Quill富文本編輯器的使用教程

    這篇文章主要介紹了Vue中Quill富文本編輯器的使用教程,包括自定義工具欄、自定義字體選項(xiàng)、圖片拖拽上傳、圖片改變大小等使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • van-dialog 組件調(diào)用報(bào)錯(cuò)的解決

    van-dialog 組件調(diào)用報(bào)錯(cuò)的解決

    這篇文章主要介紹了van-dialog 組件調(diào)用報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • electron最小化托盤設(shè)置

    electron最小化托盤設(shè)置

    本文主要介紹了electron最小化托盤設(shè)置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 解析如何自動(dòng)化生成vue組件文檔

    解析如何自動(dòng)化生成vue組件文檔

    在我們的印象使用中,vue除了寫業(yè)務(wù)代碼沒有特別新奇的功能了,今天就來(lái)看看如何自動(dòng)化生成vue組件文檔
    2021-06-06
  • Vue.js遞歸組件實(shí)現(xiàn)組織架構(gòu)樹和選人功能案例分析

    Vue.js遞歸組件實(shí)現(xiàn)組織架構(gòu)樹和選人功能案例分析

    這篇文章主要介紹了Vue.js遞歸組件實(shí)現(xiàn)組織架構(gòu)樹和選人功能,本文通過案例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • iview實(shí)現(xiàn)select tree樹形下拉框的示例代碼

    iview實(shí)現(xiàn)select tree樹形下拉框的示例代碼

    這篇文章主要介紹了iview實(shí)現(xiàn)select tree樹形下拉框的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Vue 修改網(wǎng)站圖標(biāo)的方法

    Vue 修改網(wǎng)站圖標(biāo)的方法

    這篇文章主要介紹了Vue 修改網(wǎng)站圖標(biāo)的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue實(shí)現(xiàn)用戶登錄切換

    vue實(shí)現(xiàn)用戶登錄切換

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)用戶登錄切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • vue.js?el-table虛擬滾動(dòng)完整實(shí)例代碼

    vue.js?el-table虛擬滾動(dòng)完整實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于el-table虛擬滾動(dòng)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-12-12

最新評(píng)論