【问题标题】:Adding Role based access control for Admin-On-Rest为 Admin-On-Rest 添加基于角色的访问控制
【发布时间】:2017-07-12 15:46:45
【问题描述】:

我正在使用 Marmelab Admin-On-Rest 创建一个应用程序,以创建一个应用程序,让用户团队可以编辑、绘制图表、安排、发布并最终跟踪一组博客文章。

希望根据每个团队的角色向他们展示自定义视图。

有什么方法可以使用 Admin-On-Rest 实现这一目标?理想情况下,希望使用默认的 Admin-On-Rest,而不是从头开始创建我自己的 Redux 和 React 应用程序。

【问题讨论】:

    标签: reactjs redux admin-on-rest


    【解决方案1】:

    我认为这是一个相当普遍的情况。我正在考虑以下解决方案:

    使用hasRole 方法扩展authClient。

    提供一个采用authClient 的withRoles 高阶函数和一个到视图组件的对象映射角色。

    用法如下:

    import React from 'react';
    
    import { simpleRestClient, Admin, Resource } from 'admin-on-rest';
    import withRoles from 'aor-roles';
    
    import { PostCreateForTeam1, PostCreateForTeam2 } from './posts';
    
    const App = () => (
        <Admin restClient={simpleRestClient('http://path.to.my.api')}>
            <Resource name="posts" list={PostList} create={
                withRoles(authClient, {
                    team1: PostCreateForTeam1,
                    team2: PostCreateForTeam2,
                })
            } />
        </Admin>
    );
    
    export default App;

    team1 和 team2 将是角色。有趣的是,authClient.hasRole 可以是异步的,以便它可以使用 API 检查角色(我正在考虑用于身份验证和角色检查的 SASS 服务)。正确处理这个问题可能很棘手。

    给我一​​些时间考虑一下:)

    编辑:找到了一个我很满意的 API。

    authClient 必须管理一个新类型:AUTH_GET_ROLE,它将返回一个解析为用户角色的承诺。

    export const ProductEdit = props => (
        <SwitchRoles authClient={authClient} {...props}>
            <ForRole role="role1">
                <ProductEditRole1 />
            </ForRole>
            <ForRole role="role2">
                <ProductEditRole2 />
            </ForRole>
        </SwitchRoles>
    );

    ForRole 组件的 role 属性也接受一个函数来进行更复杂的检查。

    我们刚刚发布了aor-permissions!

    【讨论】:

    • 我认为这可能有效。将不得不扩展资源组件。试一试,告诉你我的结果。但是,我对前端工程还是很陌生 :) 所以我的解决方案可能不是很优雅。
    • 我们将很快发布解决方案,无论是今天还是明天。已经可以看了:github.com/marmelab/aor-permissions
    • 给你!让我们知道您的想法 :) npmjs.com/package/aor-permissions
    【解决方案2】:

    除了您的 authClient 之外,您可能还必须至少制作一个自定义减速器。然后制作一个与redux连接的ForRole组件,类似于Admin-on-rest中的Responsive组件。

    检查其中的角色并使其显示每个角色所需的内容

    【讨论】:

    • 嗨@吉尔达斯。我明白你的意思了。我错误地认为您的意思是将响应式组件作为特定类别的组件(在 github 上)。我想,这可能行得通。当我进一步深入我的项目并为我的其他用户类别准备好组件时,我将尝试编写一个自定义减速器。再次感谢您抽出宝贵时间。
    • 进一步思考。这个 ForRole 组件必须作为子组件传递给 Admin 组件。我想我的问题又不是很具体。查看 Admin 文档,它似乎没有能力支持除 Resouce 之外的任何组件。你认为我可以在不进行重大改造的情况下完成这项工作吗?
    • 我一直在考虑这个marmelab.com/admin-on-rest/Theming.html#responsive-utility 是否有可能以某种方式显示基于身份验证的自定义管理菜单?
    • 无法将我很长的新答案作为评论发布,所以我不得不创建一个新答案:)
    猜你喜欢
    • 2020-02-06
    • 2018-01-24
    • 2010-09-11
    • 2013-08-28
    • 2012-06-25
    • 2013-05-08
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多