gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:32:09 25 4
gpt4 key购买 nike

我正在开发具有不同多 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中实现基于多 Angular 色的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60595658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com