一對一原始碼,前端頁面許可權和按鈕許可權控制
1. 獲取使用者當前許可權並且存在全域性狀態中
export async function getInitialState() { // ... const userPermissions = await fetchUserPermissions(); return { // .... userPermissions, }; }
2. 定義頁面許可權標記
const PERMISSIONS = { PAGEA: { READ: "PAGEA_READ", // 頁面訪問許可權標記 ADD: "PAGEA_ADD" // 頁面中操作按鈕許可權標記 // ... 其他頁面中操作按鈕 } // ... 其他頁面許可權標記 }
3. 路由和選單的許可權控制
export const routes = [ { path: '/pageA', component: 'PageA', access: 'canAccessRoute', // 會呼叫 src/access.ts 中返回的 canAccessRoute 進行鑑權 meta: { permission: PERMISSIONS.PAGEA.READ, // 頁面訪問許可權標記 }, }, { path: '/pageB', component: 'PageB', access: 'canAccessRoute', // 會呼叫 src/access.ts 中返回的 canAccessRoute 進行鑑權 meta: { permission: PERMISSIONS.PAGEB.READ, // 頁面訪問許可權標記 }, }, ];
編寫判斷使用者是否擁有頁面許可權判斷邏輯,其邏輯十分簡單,即判斷當前一對一原始碼路由許可權標記是否在使用者擁有的許可權中。
export default function access(initialState) { const { userPermissions } = initialState ?? {}; function canAccessRoute(route: IRoute) { // 頁面對應的許可權標記,需要在當前使用者擁有的許可權中 if (route.meta?.permission) { return userPermissions.includes(route.meta.permission); } // 無頁面許可權標記說明改頁面不需要許可權也能訪問 return true; } return { canAccessRoute, }; }
4. 按鈕許可權控制
export default function access(initialState) { // ... function canAccessAction(permissions: string[]) { // 按鈕對應的許可權標記,需要在當前使用者擁有的許可權中 return permissions.every((permission) => userPermissions.includes(permission)); } return { // ... canAccessAction }; }
function PageA() { const { canAccessAction } = useAccess(); return ( <Access accessible={canAccessAction([PERMISSIONS.PAGEA.ADD])}> <Button>新增</Button> </Access> ) }
封裝一個通用的許可權元件在 React 中是十分簡單的,例如 Umi 中的 Access 元件
export interface AccessProps { accessible: boolean; fallback?: React.ReactNode; } export const Access: React.FC<PropsWithChildren<AccessProps>> = (props) => { if (process.env.NODE_ENV === 'development' && typeof props.accessible !== 'boolean') { throw new Error('[access] the \`accessible\` property on <Access /> should be a boolean'); } return <>{ props.accessible ? props.children : props.fallback }</>; };
以上就是一對一原始碼,前端頁面許可權和按鈕許可權控制, 更多內容歡迎關注之後的文章
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69978258/viewspace-3005386/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【專案實踐】一文帶你搞定頁面許可權、按鈕許可權以及資料許可權
- 選單許可權和按鈕許可權設定
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- 許可權系統:一文搞懂功能許可權、資料許可權
- 一個簡單的Vue按鈕級許可權方案Vue
- 前端單頁面應用的許可權管理前端
- .NET 程式許可權控制、獲得管理員許可權程式碼
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Oracle許可權(一)Oracle
- Elasticsearch 許可權控制Elasticsearch
- vue要做許可權管理該怎麼做?如果控制到按鈕級別的許可權怎麼做?Vue
- 非常強的許可權管控,精細到頁面按鈕及APIAPI
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 許可權之選單許可權
- Android系統許可權和root許可權Android
- 對定義者許可權和呼叫者許可權的理解
- Linux許可權控制Linux
- Appfuse:許可權控制APP
- 基於VUE自定義指令實現按鈕級許可權控制Vue
- Vue2-利用自定義指令實現按鈕許可權控制Vue
- 一對一直播系統原始碼,後臺管理系統許可權控制方案原始碼
- vue + vuex + directives實現許可權按鈕的思路Vue
- 小知識:軟體開發的許可權控制和許可權驗證
- Linux-許可權管理(ACL許可權)Linux
- OGG的加密和許可權控制加密
- Laravel實現許可權控制Laravel
- mysql 許可權控制筆記MySql筆記
- oracle列級許可權控制Oracle
- Linux的許可權控制Linux
- AIX 的許可許可權(轉)AI
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- 超級實用!React-Router v6實現頁面級按鈕許可權React
- Vue 專案實現按鈕級別許可權管理Vue
- 使用者許可權繼承另一使用者的許可權繼承
- Nestjs RBAC 許可權控制管理實踐(一)JS
- MySQL使用者許可權控制一例MySql