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

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

CLIENTPORTAL2 Client Portal

Users2 enter image description here

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

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

$w.onReady(function () {

    let user = wixUsers.currentUser;
    user.getEmail()
    .then( (currentEmail) => {
    let userEmail = currentEmail;      // "user@something.com"
    } );
    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), отображаемой на странице клиентского портала, теперь отображаются документы, относящиеся к компании, в которой работает пользователь. Так, например, если «dew0025@auburn.edu» вошел на сайт, этот пользователь сможет просматривать только документы в таблице ниже, потому что этот пользователь ограничен «Компания 1»

table1 отображается на странице участников клиентского портала enter image description here

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

1 Ответ

1 голос
/ 06 мая 2020

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

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

...