【发布时间】:2021-07-06 02:42:41
【问题描述】:
根据用户的权限和记录的状态,限制对资源的访问的最佳方法是什么?例如,具有某种工作流程(如时间表或费用报销系统)的表单,用户可以在其中提交表单,然后表单处于 已提交 状态,用户只能查看 只有管理员才能编辑表单?
试图找出基于AuthProvider 强制执行权限的最佳方法,以防止用户仅更改 URL 浏览器在“显示/编辑”模式之间切换。
【问题讨论】:
标签: react-admin
根据用户的权限和记录的状态,限制对资源的访问的最佳方法是什么?例如,具有某种工作流程(如时间表或费用报销系统)的表单,用户可以在其中提交表单,然后表单处于 已提交 状态,用户只能查看 只有管理员才能编辑表单?
试图找出基于AuthProvider 强制执行权限的最佳方法,以防止用户仅更改 URL 浏览器在“显示/编辑”模式之间切换。
【问题讨论】:
标签: react-admin
我看到了两种可能性:
show 和edit 视图。在edit 视图中,如果用户权限不允许该版本,请使用a <Redirect> component 重定向到show 视图。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 :-)
authProvider.canEdit(record),并从<EditContent> 使用 useAuthProvider 钩子。