一對一原始碼,前端頁面許可權和按鈕許可權控制
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
- 許可權系統:一文搞懂功能許可權、資料許可權
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- vue要做許可權管理該怎麼做?如果控制到按鈕級別的許可權怎麼做?Vue
- shiro許可權控制
- Django(63)drf許可權原始碼分析與自定義許可權Django原始碼
- 前端單頁面應用的許可權管理前端
- 非常強的許可權管控,精細到頁面按鈕及APIAPI
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 基於VUE自定義指令實現按鈕級許可權控制Vue
- Vue2-利用自定義指令實現按鈕許可權控制Vue
- 許可權之選單許可權
- Linux的許可權控制Linux
- 一對一直播系統原始碼,後臺管理系統許可權控制方案原始碼
- Linux的檔案存取許可權和0644許可權Linux
- 小知識:軟體開發的許可權控制和許可權驗證
- Nestjs RBAC 許可權控制管理實踐(一)JS
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- 許可權維持專題:域控制器許可權維持
- Laravel實現許可權控制Laravel
- Vue 專案實現按鈕級別許可權管理Vue
- SpringBoot(一) 如何實現AOP的許可權控制Spring Boot
- MySQL使用者許可權控制一例MySql
- 超級實用!React-Router v6實現頁面級按鈕許可權React
- 前端學習(2590):前端許可權的選單控制前端
- Confluence6對比系統管理員許可權和Confluence管理員許可權
- Linux特殊許可權之suid、sgid、sbit許可權LinuxUI
- 前端如何配合後端完成RBAC許可權控制前端後端
- 前端真的能做到徹底許可權控制嗎?前端
- 前端許可權控制系統的實現思路前端
- Vue 前端應用實現RBAC許可權控制的一種方式Vue前端
- elasticsearch7.8許可權控制和規劃Elasticsearch
- springboot許可權設計思路(精確到按鈕級別)Spring Boot
- mysql許可權MySql