有没有一种方法可以基于Firebase角色保护url?

时间:2018-08-27 02:40:08

标签: javascript reactjs firebase firebase-authentication

我正在尝试根据所访问用户的角色来限制网址,我具有以下HOC来做到这一点

ctx.rule.attr.deps

使用以下代码来限制网址(如果用户进行了操作)

function report_test() {

$color = "blue";
$name = "John";

$columnid = mobile_test($color, $name);
echo $columnid;
}

我可以得到这样的用户角色,因为我必须在导航中执行以根据角色呈现不同的navBar

mobile_test()

问题是我现在如何混合这些东西以将userRole传递给条件?

1 个答案:

答案 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保护并进行检查

使用此代码有效