来自React / Redux应用程序中组件的权限检查

天空

我正在尝试与一个团队一起构建一个React应用程序,并试图找出创建一个“高阶” React组件(一个包装另一个组件)以与Redux数据存储结合执行身份验证的最佳方法。

到目前为止,我的方法是创建一个模块,该模块由一个函数组成,该函数根据是否有经过身份验证的用户来返回新的React组件。

export default function auth(Component) {

    class Authenticated extends React.Component {

        // conditional logic

        render(){
            const isAuth = this.props.isAuthenticated;

            return (
                <div>
                    {isAuth ? <Component {...this.props} /> : null}
                </div>
            )
        }
    }

    ...

    return connect(mapStateToProps)(Authenticated);

}

这使我团队中的其他人可以轻松地指定某个组件是否需要某些权限。

render() {
    return auth(<MyComponent />);
}

如果您要执行基于角色的检查,则这种方法很有意义,因为您可能只有几个角色。在这种情况下,您可以致电auth(<MyComponent />, admin)

对于基于权限的检查,传递参数变得笨拙。但是,在构建组件时(以及在团队环境中可管理)在组件级别指定权限可能是可行的。设置静态方法/属性似乎是一个不错的解决方案,但据我所知,es6类导出为函数,但不会显示可调用方法。

有没有办法访问导出的React组件的属性/方法,以便可以从包含的组件中访问它们?

科科文·弗拉迪斯拉夫(Kokovin Vladislav)

onEnter很棒,在某些情况下很有用。但是,以下是onEnter无法解决的一些常见身份验证和授权问题:

  • 根据Redux存储数据确定身份验证/授权(有一些解决方法
  • 如果商店更新(但不是当前路由),请重新检查身份验证/授权

  • 如果子路由在受保护的路由下更改,请重新检查身份验证/授权

另一种方法是使用高阶组件。

您可以使用 Redux-auth-wrapper提供的高阶组件,以便于组件读取和应用身份验证和授权约束。


  • 要获取子方法,可以使用:refs, callback and callback from refs

  • 要获得儿童道具,您可以使用:this.refs.child.props.some or compInstance.props.some

方法和道具示例:

class Parent extends Component {
    constructor(props){
        super(props);
        this.checkChildMethod=this.checkChildMethod.bind(this);
        this.checkChildMethod2=this.checkChildMethod2.bind(this);
        this.checkChildMethod3=this.checkChildMethod3.bind(this);
    }
    checkChildMethod(){
        this.refs.child.someMethod();
        console.log(this.refs.child.props.test);
    }
    checkChildMethod2(){
        this._child2.someMethod();
        console.log(this._child2.props.test);
    }
    checkChildMethod3(){
        this._child3.someMethod();
        console.log(this._child3.props.test);
    }
    render(){
        return (
            <div>
                Parent
                <Child ref="child" test={"prop of child"}/>
                <ChildTwo ref={c=>this._child2=c} test={"prop of child2"}/>
                <ChildThree returnComp={c=>this._child3=c} test={"prop of child3"}/>
                <input type="button" value="Check method of child" onClick={this.checkChildMethod}/>
                <input type="button" value="Check method of childTwo" onClick={this.checkChildMethod2}/>
                <input type="button" value="Check method of childThree" onClick={this.checkChildMethod3}/>
            </div>
        );
    }
}

class Child extends Component {
    someMethod(){
        console.log('someMethod Child');
    }
    render(){
        return (<div>Child</div>);
    }
}
class ChildTwo extends Component {
    someMethod(){
        console.log('someMethod from ChildTwo');
    }
    render(){
        return (<div>Child</div>);
    }
}
class ChildThree extends Component {
    componentDidMount(){
        this.props.returnComp(this);
    }
    someMethod(){
        console.log('someMethod from ChildThree');
    }
    render(){
        return (<div>Child</div>);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在react-redux应用程序中显示来自reddit api的响应

来自分类Dev

将函数从 mapDispatchToProps 传递给 react/redux 应用程序中的容器组件

来自分类Dev

来自闪亮应用程序的写入权限

来自分类Dev

VS2017:在 ASP.NET Core React Redux Web 应用程序模板中使用来自 react 主题的 JSX 组件

来自分类Dev

来自React应用程序的发布请求不起作用

来自分类Dev

CORS在React / Redux应用程序中执行API调用

来自分类Dev

在React / Redux应用程序中隐藏API URL(代理)

来自分类Dev

在react-redux-promise应用程序中解析XML

来自分类Dev

react-redux应用程序中的状态对象结构

来自分类Dev

在react-redux-promise应用程序中解析XML

来自分类Dev

react-redux 应用程序中的重复操作

来自分类Dev

检查 React Native 应用程序中的不活动状态

来自分类Dev

React / Redux在组件构造器中加载应用程序状态

来自分类Dev

无法使用 React 和 Redux 从自定义组件更新应用程序状态

来自分类Dev

调试“react-redux”应用程序?

来自分类Dev

如何解决错误:在我的React-Redux应用程序中,“您必须将组件传递给connect返回的函数。而不是收到{}”?

来自分类Dev

来自组件的React-Redux调度动作

来自分类Dev

来自子组件的 React PureComponent 传递参数

来自分类Dev

使用 Redux-Observable 在 React-Redux-Firebase 应用程序中实现自动保存

来自分类Dev

来自旧版(纯JS)应用的Rerender React组件

来自分类Dev

搜索组件未显示在 React 的应用程序组件上

来自分类Dev

在非React应用程序中安装/卸载React组件时,请保留DOM节点的引用

来自分类Dev

react-admin:如果要在非redux应用程序中嵌入react-admin,是否需要在应用程序中安装redux?

来自分类Dev

如何通过 React Native 中的 Intent 启动和接收来自另一个应用程序的输出?

来自分类Dev

React 中的无状态功能组件 (SFC) 未响应来自 Redux 的道具

来自分类Dev

js承诺中未捕获的错误在React / Redux应用程序中

来自分类Dev

为什么不在我的React应用程序上显示来自我的api的列表?

来自分类Dev

从 s3 提供的 React 应用程序导致来自 edge/IE 的 404 页面

来自分类Dev

Firebase 函数使用来自 React 应用程序的外部文件

Related 相关文章

  1. 1

    在react-redux应用程序中显示来自reddit api的响应

  2. 2

    将函数从 mapDispatchToProps 传递给 react/redux 应用程序中的容器组件

  3. 3

    来自闪亮应用程序的写入权限

  4. 4

    VS2017:在 ASP.NET Core React Redux Web 应用程序模板中使用来自 react 主题的 JSX 组件

  5. 5

    来自React应用程序的发布请求不起作用

  6. 6

    CORS在React / Redux应用程序中执行API调用

  7. 7

    在React / Redux应用程序中隐藏API URL(代理)

  8. 8

    在react-redux-promise应用程序中解析XML

  9. 9

    react-redux应用程序中的状态对象结构

  10. 10

    在react-redux-promise应用程序中解析XML

  11. 11

    react-redux 应用程序中的重复操作

  12. 12

    检查 React Native 应用程序中的不活动状态

  13. 13

    React / Redux在组件构造器中加载应用程序状态

  14. 14

    无法使用 React 和 Redux 从自定义组件更新应用程序状态

  15. 15

    调试“react-redux”应用程序?

  16. 16

    如何解决错误:在我的React-Redux应用程序中,“您必须将组件传递给connect返回的函数。而不是收到{}”?

  17. 17

    来自组件的React-Redux调度动作

  18. 18

    来自子组件的 React PureComponent 传递参数

  19. 19

    使用 Redux-Observable 在 React-Redux-Firebase 应用程序中实现自动保存

  20. 20

    来自旧版(纯JS)应用的Rerender React组件

  21. 21

    搜索组件未显示在 React 的应用程序组件上

  22. 22

    在非React应用程序中安装/卸载React组件时,请保留DOM节点的引用

  23. 23

    react-admin:如果要在非redux应用程序中嵌入react-admin,是否需要在应用程序中安装redux?

  24. 24

    如何通过 React Native 中的 Intent 启动和接收来自另一个应用程序的输出?

  25. 25

    React 中的无状态功能组件 (SFC) 未响应来自 Redux 的道具

  26. 26

    js承诺中未捕获的错误在React / Redux应用程序中

  27. 27

    为什么不在我的React应用程序上显示来自我的api的列表?

  28. 28

    从 s3 提供的 React 应用程序导致来自 edge/IE 的 404 页面

  29. 29

    Firebase 函数使用来自 React 应用程序的外部文件

热门标签

归档