国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:2日期:2022-09-29 11:40:03
目錄概述按鈕級(jí)權(quán)限身份認(rèn)證管理R/U權(quán)限權(quán)限刷新租戶管理租戶切換效果最后概述

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

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

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

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

srcutilsabp.js:

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

srcviewsidentityroles.vue:

<el-buttontype='primary' icon='el-icon-edit' @click='handleCreate' v-if='checkPermission(’AbpIdentity.Roles.Create’)'> {{ $t('AbpIdentity[’NewRole’]') }}</el-button>

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

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

身份認(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,不可以修改。

srcviewsidentitycomponentspermission-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;}

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

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

權(quán)限刷新

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

srcviewsidentitycomponentspermission-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 ); });

srcutilsabp.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 }); }); }}

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

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

租戶管理

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

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

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

租戶切換

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

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

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

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

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

效果

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

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

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

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

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

最后

前端部分的模塊開(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)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 中文字幕在线观看一区二区三区 | 亚洲综合精品一二三区在线 | 欧美日韩日本国产 | 特黄特色一级特色大片中文 | 亚洲精品成人在线 | 久久免费视频8 | 亚洲毛片在线播放 | 一级大黄美女免费播放 | 成年女人免费毛片视频永久 | 鲁丝片一区二区三区免费 | 免费观看一级特黄三大片视频 | 男人的天堂久久爱 | 中文字幕曰韩一区二区不卡 | 亚洲欧美综合国产不卡 | 一色屋色费精品视频在线看 | 日本国产免费一区不卡在线 | 久久国产三级精品 | 日韩精品中文字幕在线观看 | 孕妇一级片 | 国产理伦 | 亚洲一级毛片 | 国产三级在线视频观看 | 午夜视频在线观看一区二区 | 大学生一级一片第一次欧美 | 精品欧美成人bd高清在线观看 | 手机看片国产欧美日韩高清 | 永久黄网站色视频免费观看99 | 久久精品视频大全 | 久色国产| 在线欧美视频 | 国产精品亚洲天堂 | a级国产乱理伦片在线观看99 | 国产日韩精品视频一区二区三区 | www成人国产在线观看网站 | 亚洲国产欧美精品 | 亚洲国产99在线精品一区二区 | 丝袜紧身裙国产在线播放 | 欧美精品一区二区在线观看播放 | 男人天堂网在线观看 | 亚洲网址在线观看 | 欧美精品伊人久久 |