【问题标题】:Firestore Permission Denied in AndroidAndroid 中的 Firestore 权限被拒绝
【发布时间】:2026-02-23 13:25:01
【问题描述】:

我正在自学实现 Cloud Firestone 服务。

对了,我只是想读取云端的数据,却报错:com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or enough permissions。

谁能帮助我并告诉我我做错了什么?我似乎无法指出我的错误。

提前致谢!

权限:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // This rule allows anyone on the internet to view, edit, and delete
    // all data in your Firestore database. It is useful for getting
    // started, but it is configured to expire after 30 days because it
    // leaves your app open to attackers. At that time, all client
    // requests to your Firestore database will be denied.
    //
    // Make sure to write security rules for your app before that time, or else
    // your app will lose access to your Firestore database
    match /{document=**} {
        allow read, write: if request.time < timestamp.date(2020, 3, 14);
    }
  }
}

ClientFragment.java:

FirebaseFirestore databaseReference = FirebaseFirestore.getInstance();
Query query = databaseReference.collection("clients");

FirestoreRecyclerOptions<Client> options =
                new FirestoreRecyclerOptions.Builder<Client>()
                        .setQuery(query, snapshot -> {

                            Client client = snapshot.toObject(Client.class);
                            client.setId(snapshot.getId());

                            return client;
                        }).build();

        adapter = new FirestoreRecyclerAdapter<Client, ClientViewHolder>(options) {
            @Override
            public ClientViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                // Create a new instance of the ViewHolder, in this case we are using a custom
                // layout called R.layout.message for each item
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.list_item_client, parent, false);

                ClientViewHolder viewHolder = new ClientViewHolder(view);
                viewHolder.setOnDeleteClickedListener(mOnDeleteListener);
                viewHolder.setOnEditClickedListener(mOnEditListener);
                viewHolder.setOnItemClickListener(mOnItemListener);

                return viewHolder;
            }

            @Override
            protected void onBindViewHolder(ClientViewHolder holder, int position, Client model) {
                // Bind the Chat object to the ChatHolder
                // ...

                holder.Bind(model);
            }
        };


        binding.rvClient.setLayoutManager(new LinearLayoutManager(getActivity()));
        binding.rvClient.setAdapter(adapter);

数据:

Image of Data in DataBase

【问题讨论】:

    标签: android firebase google-cloud-firestore firebase-security


    【解决方案1】:

    您的规则允许读取和写入任何文档,但前提是当前日期早于 2020 年 3 月 14 日。

    allow read, write: if request.time < timestamp.date(2020, 3, 14);
    

    这些初始的默认规则集在三个月前有效“过期”。您可以根据需要更改日期(应该很明显如何执行此操作),或者您可以使用您在documentation 中学到的知识为您的查询实施适当的规则。

    【讨论】:

    • 天哪,我以为我改变了!非常感谢,我更新了日期,它的工作原理!我会尽快接受你的回答。