首页 > 编程语言 >一对一源码,前端页面权限和按钮权限控制

一对一源码,前端页面权限和按钮权限控制

时间:2024-01-27 14:14:13浏览次数:30  
标签:return 标记 源码 按钮 权限 页面

一对一源码,前端页面权限和按钮权限控制

页面权限是一对一源码后台系统中非常常见的需求,在前端实现页面权限和按钮权限是为了确保用户只能访问其有权访问的页面,并执行其有权执行的操作。本文介绍前端实现页面权限和按钮权限控制的流程和逻辑。

1. 获取用户当前权限并且存在全局状态中

首先需要从一对一源码后端接口中获取到当前用户拥有的所有权限列表,并且存储在全局状态中(这个场景中使用全局状态库是一个很合适的方式)。

export async function getInitialState() {
  // ...
  const userPermissions = await fetchUserPermissions();
  return {
    // ....
    userPermissions,
  };
}

 

2. 定义页面权限标记

需要将每个需要权限控制的页面和操作按钮提前定义好权限标记(某个 key),后续中使用用户拥有的权限和这个权限标记对比当前用户是否拥有权限。

这里直接写成一份常量维护,方便在不同组件中使用和维护。

const PERMISSIONS = {
  PAGEA: {
    READ: "PAGEA_READ", // 页面访问权限标记
    ADD: "PAGEA_ADD" // 页面中操作按钮权限标记
    // ... 其他页面中操作按钮
  }
  // ... 其他页面权限标记
}

 

3. 路由和菜单的权限控制

将之前定义好的权限标记一对一源码的路由和对应的页面上。这里使用里自定义的字段 meta 中的 permission,后续可以直接从当前路由信息中取出这个页面的权限。

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

 

以上就是一对一源码,前端页面权限和按钮权限控制, 更多内容欢迎关注之后的文章

 

标签:return,标记,源码,按钮,权限,页面
From: https://www.cnblogs.com/yunbaomengnan/p/17991370

相关文章

  • 通达信主力抄底副图指标公式源码
    VAR1:=HHV(HIGH,3);VAR2:=(IF(WINNER(1.1*CLOSE)<0,0,WINNER(1.1*CLOSE))-IF(WINNER(0.9*CLOSE)<0,0,WINNER(0.9*CLOSE)))*100;VAR3:=IF(VAR1<0,0,VAR1);VAR4:=IF(VAR2<0,0,VAR2);VAR5:=COST(10);VAR6:=(CLOSE-VAR5)/VAR5*100;VAR7:=COUNT(VAR6<-2.05,3)......
  • 通达信黑马全景主图指标公式源码
    上:=(SMA(HIGH,21,2)*1.05);下轨道:(Sma(LOW,21,2)*0.969),POINTDOT,COLOR00FFFF;BMA:=MA(CLOSE,118);阻挡:=(SMA(HIGH,21,2)*1.05);RSV:=(((CLOSE-LLV(LOW,13))/(HHV(HIGH,13)-LLV(LOW,13)))*100);K:=SMA(RSV,3,1);D:=SMA(K,3,1);J:=((3*K)-(2*D));R......
  • 通达信鼎牛涨停主图指标公式源码
    ma3D:=MA(C,3);MA5D:=MA(C,5);ZX:=(MA3D+MA5D)/2;MA20D:=MA(C,20),NODRAW;MA30D:=MA(C,30),NODRAW;QSXS:=MA5D>=MA30DANDMA30D>REF(MA30D,1);GD:=ZX>=REF(ZX,1)ANDREF(ZX,1)<ref(zx,2);YB:=C>REF((O-C)/2+C,2);买:=crOSS(C,ZX)AND(GDORYB)AND......
  • 通达信分时启动指标公式源码副图
    BGTYU:=IF(DATE<=1150530,1,1);GHYJKU:=BETWEEN((DCLOSE*BGTYU)/(SUM(AMOUNT,BARSCOUNT((DCLOSE*BGTYU)))/SUM(vol*100,BARSCOUNT((DCLOSE*BGTYU)))),1.05,0.95);VBNH:=IF(GHYJKU=0,ma((DCLOSE*BGTYU),BARSCOUNT((DCLOSE*BGTYU))),(SUM(AMOUNT,BARSCOUNT((DCLOSE*BGTYU))......
  • 通达信探底擒妖指标公式源码副图
    {指标公式:加速起爆点出现时,在“灭庄一根线”副图中,主力线(红色)与操作线(黄色)均位于青色水平线附近,数值10左右,且尽量要求主力、操作线均紧挨青色水平线(10),一旦出现此现象,上涨空间很大;反之,如果离青色水平线越远,成功率会降低很多!!放宽条件:主力线15以内,操作线21以内。}VAR2:=REF(L......
  • 通达信分时起爆预警主图指标公式源码
    现价:=C,COLORWHITE,LINETHICK2;均价11:=SUM(C*V,240)/SUM(V,240),COLORRED,LINETHICK2;TT:=BARSCOUNT(C);前高:=REF(HHV(H,TT),1);突破:=crOSS(C,REF(HHV(H,TT),1))ANDC/均价11<1.09ANDTT>1ANDTT<240;主力扫盘:=COUNT(突破,13)>=3ANDCROSS(C,REF(HHV(H,TT),1));已......
  • 通达信王子新量指标公式源码
    V1:=V/CAPITAL*100;maV5:=EMA(V/CAPITAL*100,5);MAV10:=EMA(V/CAPITAL*100,10);量能:((V1-MAV5)/MAV5*2+(V1-MAV10)/MAV10)*10;SZ:=C>0ANDC>REF(C,1);放量上涨:((crOSS(量能,20)OR(量能-REF(量能,1))>=10)ANDSZ)*10,COLORRED;stICKLINE(放量上涨,0,vol,3,0),COLORRED;......
  • 通达信【掘金红筹】全套公式 共29个指标 暴利到极致 底部连续涨停 捉妖抄底指标 源码
    通达信【掘金红筹】全套公式底部连续涨停捉妖抄底指标黑马启动源码文件分享指标包括主图附图选股指标在内,一共29个指标标准启动:股票启动连续涨停的第一日,发出‘标准启动信号强力启动:标准信号发出信号偏多,强力启动会进行筛选和屏蔽超级启动:标准启动信号多,强力启动信号少,超......
  • 通达信超短资金线指标公式源码副图
    90,COLOR9966FF,LINETHICK2;80,COLOR996699;30,COLOR9966FF,LINETHICK2;15,COLORGREEN;2,COLOR996699;A:=ma(-100*(HHV(HIGH,34)-CLOSE)/(HHV(HIGH,34)-LLV(LOW,34)),19),COLORRED;B:=-100*(HHV(HIGH,14)-CLOSE)/(HHV(HIGH,14)-LLV(LOW,14));D:=EMA(-100*(HHV(HIGH,34)......
  • NodeJS Express实现所有页面Http访问重定向跳转为Https
    要在Node.jsExpress中实现所有页面从HTTP访问跳转到HTTPS,你可以使用重定向中间件。以下是一个简单的示例:首先,确保你已经安装了Express和express-redirect中间件。如果没有,你可以通过npm进行安装:npminstallexpressexpress-redirect然后,在你的主应用程序文件(例如app.js)中,引入Expr......