您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用vue怎么實現身份認證管理和租戶管理功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
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" type="primary" icon="el-icon-edit" @click="handleCreate" v-if="checkPermission('AbpIdentity.Roles.Create')" > {{ $t("AbpIdentity['NewRole']") }} </el-button>
角色和用戶的增刪改查就不說了,這里要注意一下權限管理。用戶和角色都需要用到權限管理,在ABP Angular版中是一個獨立的permission-management模塊。我這里也把他作為一個公用組件,根據providerName來區分,"R"是角色權限,"U"是用戶權限。
他們有一點區別,用戶權限可能來自于角色權限,所以用戶中的權限需要顯示是來自哪個providerName和providerKey,如果來自其他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; }
還有一個細節問題,如果正在修改的權限影響到了當前用戶,如何立即生效。
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的角色不可以刪除,并且不可以修改名稱;新增用戶和編輯用戶的密碼校驗規則需要區別對待;保存權限是差異保存。等等。。。有條件的可以看一下ABP的Angular代碼。
基本功能界面都差不多。。。但是這里有一個”管理功能“的選項,默認是顯示”沒有可用的功能“:
這玩意在界面上沒地方添加,也沒地方刪除,但是這個功能相當實用。它來自ABP的FeatureManagement模塊,也稱為”特征管理“,這個后面再做介紹。
完成了租戶管理,那么登錄時也應該可以切換租戶。
切換租戶比較簡單,就是根據輸入的租戶名稱獲取到租戶ID,然后調用/abp/application-configuration接口,把租戶ID放到請求Header的__tenant字段中即可,之后的請求中也需要這個參數,不傳的話就是默認的宿主端。
其實ABP后端是可以配置是否啟用多租戶的,這里也可以根據后端配置來顯示或者隱藏租戶切換的按鈕。跟ABP模板相比,登錄界面還缺少一個注冊入口,后面再加上吧。
Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。
上述內容就是使用vue怎么實現身份認證管理和租戶管理功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。