【问题标题】:Authorization to access resource based on role and record's state基于角色和记录状态的资源访问权限
【发布时间】:2021-07-06 02:42:41
【问题描述】:

根据用户的权限和记录的状态,限制对资源的访问的最佳方法是什么?例如,具有某种工作流程(如时间表或费用报销系统)的表单,用户可以在其中提交表单,然后表单处于 已提交 状态,用户只能查看 只有管理员才能编辑表单?

试图找出基于AuthProvider 强制执行权限的最佳方法,以防止用户仅更改 URL 浏览器在“显示/编辑”模式之间切换。

【问题讨论】:

    标签: react-admin


    【解决方案1】:

    我看到了两种可能性:

    1. 在资源中同时设置showedit 视图。在edit 视图中,如果用户权限不允许该版本,请使用a <Redirect> component 重定向到show 视图。
    2. 仅设置一个edit 视图,根据权限呈现<SimpleForm><SimpleShowLayout>

    这是我将如何使用第二种解决方案:

    import * as React from 'react'
    import { Edit, useRecordContext, SimpleForm, TextInput, SimpleShowLayout, TextField  } from 'react-admin';
    
    export const PostEdit = ({ permissions, ...props }) => (
        <Edit {...props}>
            <EditContent permissions={permissions}/>
        </Edit>
    );
    
    const EditContent = ({ permissions }) => {
        const record = useRecordContext();
        if (record?.canEdit && permissions === "admin") {
            return (
                <SimpleForm>
                    <TextInput source="title" />
                </SimpleForm>
            );
        } else {
            return (
                <SimpleShowLayout>
                    <TextField source="title" />
                </SimpleShowLayout>);
        }
    };
    
    

    【讨论】:

    • 是的,我的实现是使用您在useRedirect 中提到的选项 1。我希望有一种方法可以将逻辑集中在AuthProvider :-)
    • 在 react-admin 中没有内置的方法来处理基于记录的授权,但是您可以将逻辑放在 authProvider 的新方法中(比如authProvider.canEdit(record),并从&lt;EditContent&gt; 使用 useAuthProvider 钩子。
    猜你喜欢
    • 2015-10-18
    • 2015-11-20
    • 2013-08-28
    • 2019-04-30
    • 1970-01-01
    • 2014-01-25
    • 2020-06-22
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多