基于角色和记录状态的资源访问权限
Authorization to access resource based on role and record's state
根据用户的许可和记录的状态来限制对资源的访问的最佳方法是什么?例如,具有某种工作流程的表单,例如时间表或费用报销系统,用户可以在其中提交表单,然后表单处于 已提交 状态,用户只能 查看 并且只有管理员可以编辑 表单?
尝试找出基于 AuthProvider
强制执行权限的最佳方法,以防止用户只需更改 URL 浏览器即可在“show/edit”模式之间切换。
我看到了 2 种可能性:
- 在资源中同时设置
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>);
}
};
根据用户的许可和记录的状态来限制对资源的访问的最佳方法是什么?例如,具有某种工作流程的表单,例如时间表或费用报销系统,用户可以在其中提交表单,然后表单处于 已提交 状态,用户只能 查看 并且只有管理员可以编辑 表单?
尝试找出基于 AuthProvider
强制执行权限的最佳方法,以防止用户只需更改 URL 浏览器即可在“show/edit”模式之间切换。
我看到了 2 种可能性:
- 在资源中同时设置
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>);
}
};