如何将管理员角色仅添加到Firebase中的第一个用户?

时间:2019-07-19 07:10:12

标签: javascript firebase google-cloud-firestore

我正在注册为第一位用户。

如何将管理员角色仅添加到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);

1 个答案:

答案 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属性上访问自定义声明。

相关问题