Как ограничить файлы в базе данных / таблице определенным пользователям, вошедшим на сайт wix

Недавно я создал веб-сайт на Wix, который требует, чтобы вы вошли в систему, чтобы получить доступ к созданной мной странице участника «Клиентского портала». Страница клиентского портала по сути представляет собой базу данных (коллекцию) в виде таблицы, которая позволяет пользователям выбирать и просматривать документы, относящиеся к их компании. В коллекции ClientPortal2 есть 3 поля: имя документа, фактический документ и компания, с которой он связан. База данных клиентского портала показана ниже. Я хочу, чтобы пользователи могли видеть только те документы, которые связаны с их компанией, поэтому я создал другую коллекцию под названием Users2. Users2 ссылается на всех пользователей, у которых есть учетная запись, в поле с несколькими ссылками (электронная почта) и на компанию, на которую они работают в другой области (компания). Users2 также показан ниже. Подводя итог, я хочу, чтобы пользователи могли просматривать ТОЛЬКО документы своей компании, а не чужие.

CLIENTPORTAL2  Клиентский портал

Пользователи2  введите описание изображения здесь

Код, который я написал для сортировки документов на основе аффилированной компании определенного пользователя, показан ниже:

import wixUsers from 'wix-users';
import wixData from 'wix-data';

$w.onReady(function () {

    let user = wixUsers.currentUser;
    user.getEmail()
    .then( (currentEmail) => {
    let userEmail = currentEmail;      // "[email protected]"
    } );
    user.getEmail()
    .then( (currentEmail) => {
        console.log(currentEmail);
        wixData.query('Users2').include('email')
        .find().then((results) => {
            for (var i=0;i<results.items.length ;i++) {
                for (var j=0;j<results.items[i].email.length ;j++) {
                    let userLoginEmail = results.items[i].email[j].loginEmail;
                    if (userLoginEmail === currentEmail){
                        let userCompany = results.items[i].company
                        filter(userCompany);
                    }   
                }
            }
        })
    })
});

function filter(Company){
    wixData.query('CLIENTPORTAL2').eq("company", Company)
        .find().then( (results) => {
            let tableData = results.items;
            $w('#table1').rows = tableData;
            console.log(results.items);
            console.log(Company);

        })
}

Код выполняет запрос к «Users2», просматривает адреса электронной почты всех пользователей и сравнивает их с адресом текущего пользователя, вошедшего в систему. Затем он запускает запрос на ClientPortal2, используя аффилированную с пользователями компанию, которую он только что нашел в первом запросе. В таблице (# table1), отображаемой на странице клиентского портала, теперь отображаются документы, относящиеся к компании, в которой работает пользователь. Так, например, если «[email protected]» был зарегистрирован на сайте, этот пользователь сможет просматривать только документы в таблице ниже, потому что этот пользователь ограничен «Компания 1».

table1 отображается на странице участников клиентского портала  введите описание изображения здесь

Таким образом, этот код работает хорошо, но работает только на странице предварительного просмотра, а не на опубликованной в реальном времени странице. Что я делаю неправильно? Есть ли более простой способ сделать это или я ошибаюсь? Заранее спасибо.


person Preston White    schedule 05.05.2020    source источник


Ответы (1)


В режиме предварительного просмотра используется база данных песочницы, а действующие сайты используют действующую базу данных. Если вы вставите элемент в базу данных песочницы, он не появится в действующей базе данных, если вы не синхронизировать свои базы данных.

Также проверьте права доступа к базе данных.

person Shan    schedule 05.05.2020
comment
Спасибо @shan за вашу помощь. Вот в чем проблема. Разрешения на коллекции должны быть только для участников - person Preston White; 06.05.2020