我正在注册为第一位用户。
如何将管理员角色仅添加到Firebase Firestore数据库中的第一个用户?
CREATE or REPLACE FUNCTION TriggerTest() RETURNS trigger AS $$
DECLARE cmd varchar;
SET cmd=concat('java -cp "/home/lmu/pantheon/athena/jars/JMSReplication-1.0.jar:/home/lmu/pantheon/athena/jars/*" com.path.athena.core.JMSSender insert:',new.id,'lane_config ', ' "',new.id,'"',' ',' "',new.lane_no,'"',' ',' "',new.lane_config_id,'"',' ');
returns cmd;
$$ LANGUAGE plsh;
CREATE TRIGGER tbefore BEFORE INSERT OR UPDATE OR DELETE ON ttest2
FOR EACH ROW EXECUTE PROCEDURE TriggerTest(new);
答案 0 :(得分:1)
您可以创建一个云功能,如果创建了用户,则会触发该功能。
import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
admin.initializeApp({
databaseURL: "https://your-project-name.firebaseio.com"
});
export const onCreateUser = functions.auth.user().onCreate(async (createdUser) => {
const listUsersResult = await admin.auth().listUsers(2);
if (listUsersResult.users.length === 1) {
await admin.auth().setCustomUserClaims(createdUser.uid, {admin: true});
} else {
await admin.auth().setCustomUserClaims(createdUser.uid, {admin: false});
}
return;
});
通过admin.auth().listUsers(1)
方法,您将获得一个长度为1的用户数组。
如果创建的用户是该项目的第一个用户,则该方法将返回一个空数组。在这种情况下,用户自定义声明将设置为{admin: true}
。
现在您可以创建一个安全规则,允许该用户访问所有Firestore文档。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null && request.auth.token.admin == true;
}
}
}
可以在request.auth.token
属性上访问自定义声明。