亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解vue身份認(rèn)證管理和租戶管理

 更新時(shí)間:2021年05月25日 15:35:22   作者:xhznl  
本篇開(kāi)始功能模塊的開(kāi)發(fā),首先完成ABP模板自帶的身份認(rèn)證管理模塊和租戶管理模塊。同樣的,參考ABP的Angular版本來(lái)做。

概述

功能模塊的開(kāi)發(fā)往往是最容易的,但是要處理好每個(gè)細(xì)節(jié)就不容易了。就拿這里的身份認(rèn)證管理模塊來(lái)說(shuō),看似很簡(jiǎn)單,因?yàn)楹蠖私涌诙际茿BP模板里現(xiàn)成的,前端部分無(wú)非就是寫界面,調(diào)接口,綁數(shù)據(jù);但是看一下ABP Angular版本的代碼,就會(huì)發(fā)現(xiàn)他其實(shí)是有很多細(xì)節(jié)方面的處理的。

回到vue,因?yàn)榍岸瞬糠值拇a文件太多,下面只列出一些需要注意的細(xì)節(jié),其他的像vue組件、表格、表單、數(shù)據(jù)綁定、接口請(qǐng)求之類的其實(shí)都差不多就不說(shuō)了。

按鈕級(jí)權(quán)限

前面章節(jié)中實(shí)現(xiàn)了菜單權(quán)限的控制,按鈕權(quán)限的道理也是一樣的。判斷abpConfig.auth.grantedPolicies是否包含某個(gè)權(quán)限,然后在組件中使用v-if渲染就好了。

src\utils\abp.js:

export function checkPermission(policy) {
  const abpConfig = store.getters.abpConfig;
  if (abpConfig.auth.grantedPolicies[policy]) {
    return true;
  } else {
    return false;
  }
}

src\views\identity\roles.vue:

<el-button
  class="filter-item"
  style="margin-left: 10px;"
  type="primary"
  icon="el-icon-edit"
  @click="handleCreate"
  v-if="checkPermission('AbpIdentity.Roles.Create')"
>
  {{ $t("AbpIdentity['NewRole']") }}
</el-button>

身份認(rèn)證管理

角色和用戶的增刪改查就不說(shuō)了,這里要注意一下權(quán)限管理。用戶和角色都需要用到權(quán)限管理,在ABP Angular版中是一個(gè)獨(dú)立的permission-management模塊。我這里也把他作為一個(gè)公用組件,根據(jù)providerName來(lái)區(qū)分,"R"是角色權(quán)限,"U"是用戶權(quán)限。

R/U權(quán)限

他們有一點(diǎn)區(qū)別,用戶權(quán)限可能來(lái)自于角色權(quán)限,所以用戶中的權(quán)限需要顯示是來(lái)自哪個(gè)providerName和providerKey,如果來(lái)自其他provider則disabled,不可以修改。

src\views\identity\components\permission-management.vue:

<el-form label-position="top">
  <el-tabs tab-position="left">
    <el-tab-pane
      v-for="group in permissionData.groups"
      :key="group.name"
      :label="group.displayName"
    >
      <el-form-item :label="group.displayName">
        <el-tree
          ref="permissionTree"
          :data="transformPermissionTree(group.permissions)"
          :props="treeDefaultProps"
          show-checkbox
          check-strictly
          node-key="name"
          default-expand-all
        />
      </el-form-item>
    </el-tab-pane>
  </el-tabs>
</el-form>
transformPermissionTree(permissions, name = null) {
  let arr = [];
  if (!permissions || !permissions.some(v => v.parentName == name))
    return arr;
  const parents = permissions.filter(v => v.parentName == name);
  for (let i in parents) {
    let label = '';
    if (this.permissionsQuery.providerName == "R") {
      label = parents[i].displayName;
    } else if (this.permissionsQuery.providerName == "U") {
      label =
        parents[i].displayName +
        " " +
        parents[i].grantedProviders.map(provider => {
          return `${provider.providerName}: ${provider.providerKey}`;
        });
    }
    arr.push({
      name: parents[i].name,
      label,
      disabled: this.isGrantedByOtherProviderName(
        parents[i].grantedProviders
      ),
      children: this.transformPermissionTree(permissions, parents[i].name)
    });
  }
  return arr;
},
isGrantedByOtherProviderName(grantedProviders) {
  if (grantedProviders.length) {
    return (
      grantedProviders.findIndex(
        p => p.providerName !== this.permissionsQuery.providerName
      ) > -1
    );
  }
  return false;
}

權(quán)限刷新

還有一個(gè)細(xì)節(jié)問(wèn)題,如果正在修改的權(quán)限影響到了當(dāng)前用戶,如何立即生效。

src\views\identity\components\permission-management.vue:

updatePermissions(this.permissionsQuery, { permissions: tempData }).then(
  () => {
    this.dialogPermissionFormVisible = false;
    this.$notify({
      title: this.$i18n.t("HelloAbp['Success']"),
      message: this.$i18n.t("HelloAbp['SuccessMessage']"),
      type: "success",
      duration: 2000
    });
    fetchAppConfig(
      this.permissionsQuery.providerKey,
      this.permissionsQuery.providerName
    );
  }
);

src\utils\abp.js:

function shouldFetchAppConfig(providerKey, providerName) {
  const currentUser = store.getters.abpConfig.currentUser;

  if (providerName === "R")
    return currentUser.roles.some(role => role === providerKey);

  if (providerName === "U") return currentUser.id === providerKey;

  return false;
}
export function fetchAppConfig(providerKey, providerName) {
  if (shouldFetchAppConfig(providerKey, providerName)) {
    store.dispatch("app/applicationConfiguration").then(abpConfig => {
      resetRouter();

      store.dispatch("user/setRoles", abpConfig.currentUser.roles);

      const grantedPolicies = abpConfig.auth.grantedPolicies;

      // generate accessible routes map based on grantedPolicies
      store
        .dispatch("permission/generateRoutes", grantedPolicies)
        .then(accessRoutes => {
          // dynamically add accessible routes
          router.addRoutes(accessRoutes);
        });

      // reset visited views and cached views
      //store.dispatch("tagsView/delAllViews", null, { root: true });
    });
  }
}

還有很多需要注意的,比如isStatic===true的角色不可以刪除,并且不可以修改名稱;新增用戶和編輯用戶的密碼校驗(yàn)規(guī)則需要區(qū)別對(duì)待;保存權(quán)限是差異保存。等等。。。有條件的可以看一下ABP的Angular代碼。

租戶管理

基本功能界面都差不多。。。但是這里有一個(gè)”管理功能“的選項(xiàng),默認(rèn)是顯示”沒(méi)有可用的功能“:

這玩意在界面上沒(méi)地方添加,也沒(méi)地方刪除,但是這個(gè)功能相當(dāng)實(shí)用。它來(lái)自ABP的FeatureManagement模塊,也稱為”特征管理“,這個(gè)后面再做介紹。

租戶切換

完成了租戶管理,那么登錄時(shí)也應(yīng)該可以切換租戶。

切換租戶比較簡(jiǎn)單,就是根據(jù)輸入的租戶名稱獲取到租戶ID,然后調(diào)用/abp/application-configuration接口,把租戶ID放到請(qǐng)求Header的__tenant字段中即可,之后的請(qǐng)求中也需要這個(gè)參數(shù),不傳的話就是默認(rèn)的宿主端。

其實(shí)ABP后端是可以配置是否啟用多租戶的,這里也可以根據(jù)后端配置來(lái)顯示或者隱藏租戶切換的按鈕。跟ABP模板相比,登錄界面還缺少一個(gè)注冊(cè)入口,后面再加上吧。

效果

最后

前端部分的模塊開(kāi)發(fā)就不再詳細(xì)介紹了,主題還是ABP。進(jìn)行到這里,ABP模板自帶的前端部分功能就差不多完成了,需要代碼的可以去 https://github.com/xiajingren/HelloAbp 拉取,后面我再把文件整理一下,弄一個(gè)干凈的vue版本。

以上就是詳解vue身份認(rèn)證管理和租戶管理的詳細(xì)內(nèi)容,更多關(guān)于vue身份認(rèn)證管理和租戶管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 關(guān)于Vue的URL轉(zhuǎn)跳與參數(shù)傳遞方式

    關(guān)于Vue的URL轉(zhuǎn)跳與參數(shù)傳遞方式

    這篇文章主要介紹了關(guān)于Vue的URL轉(zhuǎn)跳與參數(shù)傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能

    iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了iview+vue實(shí)現(xiàn)導(dǎo)入EXCEL預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端

    vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端

    這篇文章主要為大家詳細(xì)介紹了vue使用localStorage保存登錄信息 適用于移動(dòng)端、PC端,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 動(dòng)態(tài)Axios的配置步驟詳解

    動(dòng)態(tài)Axios的配置步驟詳解

    這篇文章主要給大家分享介紹了關(guān)于動(dòng)態(tài)Axios的配置步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),通過(guò)這個(gè)教程大家可以很方便的實(shí)現(xiàn)動(dòng)態(tài)Axios的配置,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Vue3+Canvas實(shí)現(xiàn)坦克大戰(zhàn)游戲(一)

    Vue3+Canvas實(shí)現(xiàn)坦克大戰(zhàn)游戲(一)

    這篇文章將利用Vue3和Canvas編寫一個(gè)童年經(jīng)典游戲—坦克大戰(zhàn),文中的示例代碼講解詳細(xì),感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)一下吧
    2022-03-03
  • Vue??vuex配置項(xiàng)和多組件數(shù)據(jù)共享案例分享

    Vue??vuex配置項(xiàng)和多組件數(shù)據(jù)共享案例分享

    這篇文章主要介紹了Vue??vuex配置項(xiàng)和多組件數(shù)據(jù)共享案例分享,文章圍繞Vue?Vuex的相關(guān)資料展開(kāi)配置項(xiàng)和多組件數(shù)據(jù)共享的案例分享,需要的小伙伴可以參考一下
    2022-04-04
  • vue3的api解讀之ref和reactive示例詳解

    vue3的api解讀之ref和reactive示例詳解

    這篇文章主要介紹了vue3的api解讀之ref和reactive詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Vue實(shí)現(xiàn)穿梭框效果

    Vue實(shí)現(xiàn)穿梭框效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)穿梭框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 如何在vue中使用HTML 5 拖放API

    如何在vue中使用HTML 5 拖放API

    這篇文章主要介紹了如何在vue中使用HTML 5 拖放API,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • vue中使用elementUI自定義校驗(yàn)及點(diǎn)擊提交不生效問(wèn)題解決辦法

    vue中使用elementUI自定義校驗(yàn)及點(diǎn)擊提交不生效問(wèn)題解決辦法

    我們?cè)陧?xiàng)目中經(jīng)常會(huì)用到ElementUI的表單驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于vue中使用elementUI自定義校驗(yàn)及點(diǎn)擊提交不生效問(wèn)題解決的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評(píng)論