如何在 admin-on-rest 中为资源设置动态 URL?
How to setup dynamic URLs for Resources in admin-on-rest?
我要求根据登录用户的类型访问以下资源。
R1: /mit/oss/12345/peers
R2:/mit/md/6879/ngrp
ID 为 12345 的用户应该可以访问 R1。ID 为 - 6879 的用户应该可以访问 R2。
问题是 - 如何根据登录用户定义具有动态值的资源 URL(例如:URL 中的 userId)。我知道 aor-permissions 库可以根据用户权限切换菜单,但是是否可以使用 URL 中的 id 动态定义资源本身?
您可以在您的休息客户端上编写一个包装器,它可以拦截调用并动态生成 URL。
基本上像这里的文档一样装饰其余客户端 --> https://marmelab.com/admin-on-rest/RestClients.html#decorating-your-rest-client-example-of-file-upload
然后您可以检查下面伪代码中的案例
if (type === 'AOR_REST_TYPE' && resource === 'BASE_RESOURCE') {
if (getUserFromLocalStorage === usr1) {
url = url1
} else {
url = url2
}
options.method = 'GET';
// other options
}
这是一个使用地图重新映射资源 URL 的简单示例。
import {simpleRestClient} from 'admin-on-rest';
// Update the remap table appropriately to map from a resource name to a different path
const remap = {
"resource1" : "resource1Remapped",
"releasepresets" : "productionintents/releasepresets"
}
const simpleRestClientWithResourceUrlRemap = (apiUrl) => {
var client = simpleRestClient(apiUrl);
return (type, resource, params) => {
if (remap[resource]) {
console.log('remapping resource from ' + resource + ' to ' + remap[resource]);
resource = remap[resource];
}
return client(type, resource, params);
}
}
export default (simpleRestClientWithResourceUrlRemap);
除了简单的重新映射,还可以使用具有逻辑的函数。
我要求根据登录用户的类型访问以下资源。
R1: /mit/oss/12345/peers
R2:/mit/md/6879/ngrp
ID 为 12345 的用户应该可以访问 R1。ID 为 - 6879 的用户应该可以访问 R2。
问题是 - 如何根据登录用户定义具有动态值的资源 URL(例如:URL 中的 userId)。我知道 aor-permissions 库可以根据用户权限切换菜单,但是是否可以使用 URL 中的 id 动态定义资源本身?
您可以在您的休息客户端上编写一个包装器,它可以拦截调用并动态生成 URL。
基本上像这里的文档一样装饰其余客户端 --> https://marmelab.com/admin-on-rest/RestClients.html#decorating-your-rest-client-example-of-file-upload
然后您可以检查下面伪代码中的案例
if (type === 'AOR_REST_TYPE' && resource === 'BASE_RESOURCE') {
if (getUserFromLocalStorage === usr1) {
url = url1
} else {
url = url2
}
options.method = 'GET';
// other options
}
这是一个使用地图重新映射资源 URL 的简单示例。
import {simpleRestClient} from 'admin-on-rest';
// Update the remap table appropriately to map from a resource name to a different path
const remap = {
"resource1" : "resource1Remapped",
"releasepresets" : "productionintents/releasepresets"
}
const simpleRestClientWithResourceUrlRemap = (apiUrl) => {
var client = simpleRestClient(apiUrl);
return (type, resource, params) => {
if (remap[resource]) {
console.log('remapping resource from ' + resource + ' to ' + remap[resource]);
resource = remap[resource];
}
return client(type, resource, params);
}
}
export default (simpleRestClientWithResourceUrlRemap);
除了简单的重新映射,还可以使用具有逻辑的函数。