如何在 Parse-Server 中实现“protectedFields”?

Posted

技术标签:

【中文标题】如何在 Parse-Server 中实现“protectedFields”?【英文标题】:How to implement `protectedFields` in Parse-Server? 【发布时间】:2019-05-27 04:01:55 【问题描述】:

我相信这是 Parse-Server 中的一个新功能。

默认情况下,User 类的email 字段被视为受保护字段,这意味着默认情况下email 设置为read: false, write: false 以公开。但是,User 类中的所有其他字段都设置为 read: true, write: false

在 Github 中,我看到了这个例子:

export type ClassLevelPermissions = 
find?:  [string]: boolean ,
count?:  [string]: boolean ,
get?:  [string]: boolean ,
create?:  [string]: boolean ,
update?:  [string]: boolean ,
delete?:  [string]: boolean ,
addField?:  [string]: boolean ,
readUserFields?: string[],
writeUserFields?: string[],

// new feature
protectedFields?:  [string]: boolean 
;

例如,对于 _User 类,如果使用 userSensitiveFields: ['email', 'sin', 'phone'] 初始化服务器,这将等效于:


// CLP for the class ... other 
protectedFields:  "*": ["email", "sin"] 
;

现在,如果您希望版主角色能够看到用户的电子邮件,但不能看到罪孽和可以阅读所有内容的管理员


 protectedFields:  
   "*": ["email", "sin"],
   "role:moderator": ["sin"],
   "role:admin": []
 
;

看到这个例子后,我仍然很困惑到底在哪里实现protectedFields。我是否在我的应用程序的index.jsmain.js 等中实现它?有人可以给我一个如何设置字段的示例:phoneNum 具有类似于email 的默认值的protectedField

【问题讨论】:

【参考方案1】:

它是解析服务器初始化中的一个选项。在此处查看 protectedField 选项: http://parseplatform.org/parse-server/api/master/ParseServerOptions.html

我不确切知道您在哪里/如何运行 Parse 服务器,但它应该是这样的:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var app = express();

var api = new ParseServer(
  databaseURI: 'mongodb://localhost:27017/dev',
  cloud: '/home/myApp/cloud/main.js',
  appId: 'myAppId',
  masterKey: 'myMasterKey',
  fileKey: 'optionalFileKey',
  serverURL: 'http://localhost:1337/parse'
  protectedFields: 
    _User: 
      "*": ["email", "sin"],
      "role:moderator": ["sin"],
      "role:admin": []
    
  
);

app.use('/parse', api);

app.listen(1337, function() 
  console.log('parse-server-example running on port 1337.');
);

【讨论】:

Macedo 实现protectedFields: "*": ["email", "phone"] 后,其他用户仍然可以读取电话字段。我错过了什么吗? 试试 _User: '*': ['email', 'phone'] 。我会更新答案。 太棒了!我还有一个问题。我可以使用protectedFields 撤销用户更改自己的字段的写入权限吗? 我会尝试在 beforeSave 触发器中执行此操作。

以上是关于如何在 Parse-Server 中实现“protectedFields”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中使用 sparql、rdflib 询问本体

Parse-Server后台搭建与使用进阶篇(二)- Parse-server常见问题及解决方法

如何在Castle.Core中实现IProxyGenerationHook的类中实现Equals和GetHashCode的覆盖方法?

如何在android中实现svm模型?

如何在 laravel 中实现 vuetify?

parse-server:如何区分用户类 BeforeSave 中的 signUp 和常规 ParseUser.save?