javascript - 如何在React中实现基于多角色的授权

标签 javascript reactjs ecmascript-6 react-redux react-router

我正在开发具有不同多 Angular 色(管理员、用户、经理)的应用程序,我想保护管理员的路径免受经理的影响,而一般用户还根据用户 Angular 色呈现 UI。我尝试过,但失败了,有人可以帮助我如何实现我的目标吗? 示例将不胜感激

谢谢

最佳答案

请注意,这不是最佳解决方案,只是为了给您提供一些想法。

创建文件 RoleBasedRouting.jsx

function RoleBasedRouting({
  component: Component, roles, ...rest
}) {
  return (
    <>
      { grantPermission(roles) && (
      <Route
        {...rest}
        render={(props) => (
          <>
            <Component {...props} />
          </>
        )}
      />
      )}
      {
        !grantPermission(roles) && (
          <Route
            render={() => (
              <>
                <Unauthorized /> // Unauthorized Page View (skippable)
              </>
            )}
          />
        )
      }
    </>
  );
}

像这样在路由器中使用它 -

<Switch>
     <RoleBasedRouting exact path="/admin" component={AdminPage} roles={['ROLE_ADMIN']} />
     <RoleBasedRouting exact path="/user" component={UserPage} roles={['ROLE_USER']} />
     <RoleBasedRouting exact path="/manager" component={ManagerPage} roles={['ROLE_Manager']} />
     ...............
</Switch>

grantPermission函数中,检查登录用户是否具有所需的 Angular 色。示例-

export const grantPermission = (requestedRoles) => {
  const permittedRoles =  JSON.parse(localStorage.getItem('userRoles'));
 // in case of multiple roles, if one of the permittedRoles is present in requestedRoles, return true;
  return false;
};

要有条件地渲染 UI,您可以执行基本相同的操作。编写组件UnlockAccess -

const UnlockAccess = ({ children, request }) => {
  const permission = grantPermission(request); // request = ['ROLE_ADMIN'] / ['ROLE_USER'] / ['ROLE_MANAGER']
  return (
    <>
      {permission && children}
    </>
  );
};

现在,在 Dashboard 页面中使用 UnlockAccess 组件,如下所示 -

<Dashboard>
    <UnlockAccess request={['ROLE_ADMIN']}>
         <>
              {/*Write code/components for Admin Dashboard*/}
         </>                    
    </UnlockAccess>
    <UnlockAccess request={['ROLE_USER']}>
         <>
              {/*Write code/components for User Dashboard*/}
         </>                    
    </UnlockAccess>
    <UnlockAccess request={['ROLE_MANAGER']}>
         <>
              {/*Write code/components for Manager Dashboard*/}
         </>                    
    </UnlockAccess>
</Dashboard>

关于javascript - 如何在React中实现基于多角色的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60595658/

相关文章:

javascript - 使用 ES6 的 AngularJs Controller 中的服务调用

reactjs - ES6 解构对象中的三元条件

javascript - 解决 promise 数据

javascript - tinymce核心功能操作

javascript - 关于用 `useState`初始化 `Date.now()`的问题

javascript - 使用javascript根据值改变颜色

javascript - 如何处理智能手机浏览器上的触摸 - javascript

Javascript 减少功能不工作

reactjs - 自定义 AmplifySignOut 的布局

javascript - 在运行时将 ES5 代码转换为 ES6