【问题标题】:How to authorize user based on role in React如何根据 React 中的角色授权用户
【发布时间】:2020-06-08 09:54:03
【问题描述】:

我正在开发 React 应用程序,目前我有不同的角色,例如(管理员、经理、代理)等。如果用户没有获得该组件/页面的授权,我想保护每条路由。如果用户未授权,那么我想重定向主页。我想在登录后完成。我是一个初学者,我想解决我的问题,任何例子都将不胜感激。

谢谢

【问题讨论】:

    标签: javascript reactjs ecmascript-6 react-router


    【解决方案1】:

    您会发现不同的方法,但我使用 HOC。我小时候传递了我想要授权的功能。 HOC 有我手动传递的道具来指定允许哪些角色,许可证 ID ecc... 所以 HOC 实现了身份验证逻辑,如果用户被授权,它会呈现子级,而不是呈现一些错误页面。

    【讨论】:

    • 谢谢,你太棒了
    【解决方案2】:

    您正在寻找的是 RBAC,即基于角色的访问控制。我建立了一个库,可以完成您正在寻找的大部分内容。您可以在此处查看源代码,了解如何将其实施到您自己的项目中。 https://github.com/schester44/react-access-control

    示例:

    index.js

    import { AccessProvider } from 'react-access-control;
    
    return (<AccessProvder>
      <App />
    </AccessProvder>)
    

    App.js

    import { useAccess } from 'react-access-control'
    import Child from './Child.js'
    
    function App() {
      const { define } = useAccess()
    
      React.useEffect(() => {
        define({
          permissions: {
            "Admin": false,
            "Moderator": true
          }
        })
      }, [])
    
      return <div>
        <Child />
      </div>
    }
    

    Child.js

    import { hasPermission } from 'react-access-control'
    
    function Child() {
      const isAdmin = hasPermission('Admin')
      const isModerator = hasPermission('Moderator')
    
      return <div>
        {isAdmin && <AdminButton />}
        {isModerator && <ModeratorButton />}
      </div>
    
    }
    
    

    您还可以使用&lt;Show/&gt; 组件根据权限显示/隐藏组件

    import { Show } from 'react-access-control'
    
    
    function Child() {
      return <div>
        <Show when="Admin">
          <AdminButton />
        </Show>
      </div>
    }
    

    【讨论】:

    • 您能否提供一个基于该仓库的简短示例。
    • @John 我添加了示例
    • 谢谢,如果用户未获得该模块的授权,我们将如何保护路由
    • 当我尝试调用这个 const { define } = useAccess() 时出现错误
    • 挂钩调用无效。钩子只能在函数组件的主体内部调用。这可能是由于以下原因之一:
    猜你喜欢
    • 2017-08-05
    • 2018-04-21
    • 2020-01-17
    • 2011-09-29
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多