我正在尝试根据所访问用户的角色来限制网址,我具有以下HOC来做到这一点
ctx.rule.attr.deps
使用以下代码来限制网址(如果用户进行了操作)
function report_test() {
$color = "blue";
$name = "John";
$columnid = mobile_test($color, $name);
echo $columnid;
}
我可以得到这样的用户角色,因为我必须在导航中执行以根据角色呈现不同的navBar
mobile_test()
问题是我现在如何混合这些东西以将userRole传递给条件?
答案 0 :(得分:1)
我现在更改了HOC以接收另一个属性,并更改了此代码的工作方式
const withAuthorization = (authCondition, neededRole) => (Component) => {
class WithAuthorization extends React.Component {
componentDidMount() {
firebase.auth.onAuthStateChanged(authUser => {
if (!authCondition(authUser)) {
this.props.history.push(routes.SIGN_IN);
}
else if(neededRole=="ADMIN") {
authUser.getIdTokenResult(true)
.then((idTokenResult) => {
if(!idTokenResult.claims.admin){
this.props.history.push(routes.SIGN_IN);
}
})
}
else if(neededRole=="TEACHER") {
authUser.getIdTokenResult(true)
.then((idTokenResult) => {
if(!idTokenResult.claims.teacher && !idTokenResult.claims.admin){ //No teacher or admin
this.props.history.push(routes.SIGN_IN);
}
})
}
});
}
render() {
return (
<AuthUserContext.Consumer>
{authUser => authUser ? <Component {...this.props} /> : null}
</AuthUserContext.Consumer>
);
}
}
return withRouter(WithAuthorization);
}
export default withAuthorization;
现在,我的HOC首先检查主要条件是否返回true,如果是,它将检查我是否正在要求该组件受角色Admin或Teacher保护并进行检查
使用此代码有效