在Firebase Firestore中,我试图只允许(自定义分配的)管理员写/更新/删除资源,为此我有以下安全规则:
service cloud.firestore {
match /databases/{database}/documents {
match /resources {
allow read;
allow write, update, delete: if get(/users/$(request.auth.uid).isAdmin);
}
match /resources/{resource} {
allow read;
allow write, update, delete: if get(/users/$(request.auth.uid).isAdmin);
}
}
}
我正在使用users集合中标记为管理员的用户登录:
NfwIQAjfNdS85yDvd5yPVDyMTUj2是从身份验证窗格中获得的UID:
在写我的问题时,我让它奏效了!我犯了两个错误,如果我正确阅读文档,这两个错误都是可以避免的。
首先,所有对服务定义函数get
的调用都需要在路径前缀/database/$(database)/documents/。所以这条规则:
allow write: if get(/users/$(request.auth.uid)).isAdmin;
变成这样:
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).isAdmin;
其次,get
函数将返回一个资源,然后需要调用.data
来获取它所包含的实际数据。因此,与其这样做,不如:
get(/path/to/user/).isAdmin
您需要这样做:
get(/path/to/user/).data.isAdmin
现在我只希望能够将该逻辑提取到一个用户定义的函数中:
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isAdmin;
}
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isAdmin == true;
}
// ...
}
}
easyopen1.4.0开始支持。 创建session 登陆成功后创建session,并返回sessionId // 自定义session @PostMapping("managedSessionLogin") public String managedSessionLogin(HttpServletRequest request) { // 假设登陆成功,创建一
要使用自定义的布局管理器,我们可以重新实现 addItem(), sizeHint(), setGeometry(), itemAt() 和 takeAt()这些方法。为了确保当应用程序界面的空间非常小时,布局大小不会为 0,我们需要重载 minimumSize()方 法。日常中我们也经常看到这样的情形,即应用程序窗口的长和宽的尺寸是互为依存的,那 么我们就需要重载 hasHeightForWid
获取频道自定义菜单 删除频道自定义菜单 设置频道自定义菜单
使装饰器包含具有name属性的管道元数据。 此值将用于在模板表达式中调用此管道。 它必须是有效的JavaScript标识符。 实现PipeTransform接口的transform方法。 此方法接受管道的值和任何类型的可变数量的参数,并返回一个变换的(“管道”)值。 import { Component } from '@angular/core'; selector: 'app-root',
7.3 自定义类的组织管理 在上一节已经讲叙了如何利用 VimL 语法实现面向对象编程的基本原理,本节进一步讨论 在实践中如何更好地使用 VimL 面向对象编程。关键是如何定义类与使用类,如何管理与 组织类代码使之更整洁。因为从某种意义讲,面向对象并不是什么新的编程技术,而是抽 象思考问题的哲学,以及代码管理的方法论。 笔者在 github 托管了一个有关 VimL 面向对象编程的项目 vimlo
用户,与猫一样,常常觉得有必要标记他们的领地。 与猫不同,用户往往要定制自己的 shell 环境,如终端显示的颜色、别名等。 这通常是通过用户家目录下的一些以点开始的环境文件实现的,例如:.bash_profile。 通过修改上一节的 user::virtual::ssh_user 类,你可以将环境文件添加到基于 Puppet 的用户管理中。 在这个类中,你可以有选择地为客户提供 Puppet 文