å®å ¨è§å
å®å ¨è§å æ¯ CloudBase æ°æ®åºç ææ¡£çº§æéæ§å¶ åè½ï¼éè¿èªå®ä¹è¡¨è¾¾å¼ç²¾ç¡®æ§å¶æ¯æ¡æ°æ®ç读åæéã
é ç½®å ¥å£â
å¨ äºå¼åå¹³å°/ææ¡£åæ°æ®åº/éå管ç éæ©ãæé管çãï¼ç¹å»ã忢å°å®å ¨è§åãã
åºæ¬è¯æ³â
{
"read": "表达å¼", // 读åæéæ§å¶è¡¨è¾¾å¼
"write": "表达å¼" // åå
¥æéæ§å¶è¡¨è¾¾å¼
}
â ï¸ æ³¨æï¼å端æ¥è¯¢æ¡ä»¶å¿ é¡»æ¯å®å ¨è§åçåéï¼å¦å访é®è¢«æç»ãå½å®å ¨è§å使ç¨
doc.åæ®µåæ¶ï¼æ¥è¯¢æ¡ä»¶å¿ é¡»å å«å¯¹åºå段ã
å¸¸ç¨æ¨¡æ¿â
- ä» å建è å¯è¯»å
- å ¬å¼è¯»åï¼å建è å¯å
- åºäºç¶ææ§å¶
- 跨平å°å ¼å®¹
{
"read": "doc._openid == auth.openid",
"write": "doc._openid == auth.openid"
}
// æ¥è¯¢å½åç¨æ·åå»ºçææ¡£
db.collection('articles').where({
_openid: '{openid}'
}).get()
{
"read": true,
"write": "doc._openid == auth.openid"
}
// è¯»åææææ¡£
db.collection('articles').get()
// æ´æ°èªå·±åå»ºçææ¡£
db.collection('articles').where({
_openid: '{openid}'
}).update({ title: 'æ´æ°åçæ é¢' })
{
"read": "doc.published == true || doc.author == auth.openid",
"write": "doc.author == auth.openid"
}
// æ¥è¯¢å·²åå¸çææ¡£
db.collection('articles').where({
published: true
}).get()
// æ¥è¯¢èªå·±çææææ¡£
db.collection('articles').where({
author: '{openid}'
}).get()
{
"read": "doc.userId == auth.openid || doc.userId == auth.uid",
"write": "doc.userId == auth.openid || doc.userId == auth.uid"
}
ð¡ æ³¨æï¼å°ç¨åºç«¯ä½¿ç¨
auth.openidï¼Web端使ç¨auth.uidãæ¥è¯¢æ¶ä½¿ç¨{openid}åéä¼èªå¨éé ã
{openid} åéâ
æ¥è¯¢æ¡ä»¶ä¸å¯ä½¿ç¨å符串常é {openid} ï¼ç³»ç»ä¼èªå¨æ¿æ¢ä¸ºå¯¹åºçç¨æ·èº«ä»½æ è¯ï¼å°ç¨åºç«¯ä¸º openid ï¼Web端为 uid ï¼ã
// ä½¿ç¨ {openid} åéæ¥è¯¢å½åç¨æ·æ°æ®
db.collection('articles').where({
author: '{openid}'
}).get()
表达å¼è¯æ³â
å ç½®åéâ
| åéå | 说æ | ç¤ºä¾ |
|---|---|---|
| auth | ç¨æ·ç»å½ä¿¡æ¯ | auth.openidãauth.uid |
| doc | ææ¡£æ°æ®ææ¥è¯¢æ¡ä»¶å段 | doc.userIdãdoc.status |
| now | å½åæ¶é´æ³ | now > doc.expireTime |
è¿ç®ç¬¦â
| è¿ç®ç¬¦ | 说æ | ç¤ºä¾ |
|---|---|---|
| == | çäº | auth.openid == doc.userId |
| != | ä¸çäº | doc.status != 'deleted' |
| in | å å«äº | auth.openid in doc.editors |
| && | é»è¾ä¸ | auth.openid == doc.userId && doc.published |
| || | é»è¾æ | auth.openid == doc.userId || doc.public |
æä½ç±»åâ
| æä½ | 说æ | é»è®¤å¼ |
|---|---|---|
| read | è¯»åææ¡£ | false |
| write | åå ¥ææ¡£ | false |
| create | åå»ºææ¡£ | ç»§æ¿ write |
| update | æ´æ°ææ¡£ | ç»§æ¿ write |
| delete | å é¤ææ¡£ | ç»§æ¿ write |
get 彿°â
ç¨äºè·¨ææ¡£æééªè¯ï¼è¯æ³ï¼get('database.éåå.ææ¡£ID')
{
"read": "auth.openid in get(`database.room.${doc.roomId}`).members"
}
ä½¿ç¨ get 彿°æ¶ï¼æ¥è¯¢æ¡ä»¶å¿
é¡»å
å«è¢«å¼ç¨çåæ®µï¼å¦åä¼è¿å DATABASE_PERMISSION_DENIED é误ã
æ£ç¡®ç¤ºä¾ï¼
// æ¥è¯¢æ¡ä»¶å
å« roomId åæ®µ
db.collection('messages').where({
roomId: 'room123'
}).get()
é误示ä¾ï¼
// ç¼ºå° roomId åæ®µï¼ä¼è¿åæéæç»é误
db.collection('messages').where({
_id: 'msg123'
}).get()
éå¶æ¡ä»¶ï¼
- æ¥è¯¢æ¡ä»¶å¿
é¡»å
å«
get彿°ä¸å¼ç¨çdocåæ®µ inæä½ç¬¦ä¸çæ°ç»é¿åº¦å¿ 须为1- ä¸ä¸ªè¡¨è¾¾å¼æå¤3个
get彿° - åµå¥æ·±åº¦æå¤ä¸º2å±
- æ¯ä¸ª
get彿°ä¼äº§ç䏿¬¡æ°æ®åºè¯»åæä½
åºç¨åºæ¯â
æç« åå¸ç³»ç»â
{
"read": "doc.published == true || doc.author == auth.openid || doc.author == auth.uid",
"update": "doc.author == auth.openid || doc.author == auth.uid",
"delete": "(doc.author == auth.openid || doc.author == auth.uid) && doc.published == false"
}
// æ¥è¯¢å·²åå¸çæç«
db.collection('articles').where({ published: true }).get()
// æ¥è¯¢èªå·±çæç«
db.collection('articles').where({ author: '{openid}' }).get()
// æ´æ°èªå·±çæç«
db.collection('articles').where({
author: '{openid}',
_id: 'article123'
}).update({ title: 'æ´æ°åçæ é¢' })
åä½ææ¡£ç³»ç»â
{
"read": "auth.openid in doc.readers || auth.uid in doc.readers || auth.openid in doc.editors || auth.uid in doc.editors || doc.owner == auth.openid || doc.owner == auth.uid",
"write": "auth.openid in doc.editors || auth.uid in doc.editors || doc.owner == auth.openid || doc.owner == auth.uid",
"delete": "doc.owner == auth.openid || doc.owner == auth.uid"
}
// æ¥è¯¢ææé读åçææ¡£
db.collection('documents').where(_.or([
{ readers: _.in(['{openid}']) },
{ editors: _.in(['{openid}']) },
{ owner: '{openid}' }
])).get()
群èç³»ç»â
æ¶æ¯éåï¼
{
"read": "auth.openid in get(`database.room.${doc.roomId}`).members",
"create": "auth.openid in get(`database.room.${doc.roomId}`).members",
"update": "auth.openid == doc.sender"
}
// æ¥è¯¢æ¿é´æ¶æ¯ï¼å¿
é¡»å
å« roomIdï¼
db.collection('messages').where({
roomId: 'room123'
}).get()
æ¿é´éåï¼
{
"read": "auth.openid in doc.members",
"write": "doc.owner == auth.openid"
}
// æ¥ è¯¢å å
¥çæ¿é´
db.collection('rooms').where({
members: _.in(['{openid}'])
}).get()