Mam pewne Meteor methods i chcę je zabezpieczyć, aby tylko niektórzy użytkownicy mogli wywoływać je od klienta. Jednak te metody są również używane przez serwer. Zostaję przekazany identyfikator użytkownika w this.userid, dzięki czemu mogę sprawdzić, czy użytkownik jest zalogowany i czy może wykonać połączenie, bez problemu. Ale kiedy muszę również wywołać metodę ze strony serwera, jak określić, że to było wywołanie serwera, więc mogę zezwolić na wykonanie metody. Sprawdzanie, czy nie istnieje this.userid w celu ustalenia, czy jego wywołanie serwera umożliwia nieuwierzytelnionym użytkownikom wywoływanie metody. Szukam sposobu, aby ustalić, czy metoda została wywołana przez serwer, więc mogę go zezwolić i nadal uniemożliwia nieuwierzytelnionych użytkowników wywoływanie metody.Czy możliwe jest określenie, czy metoda Meteor została wywołana przez serwer?
Meteor.methods({
makeCoffee: function (time) {
check(time, Number);
if(calledByServer || (Meteor.user() && Meteor.user().profile.usertype === 'coffee dude')){
//Makin' Coffee
}
else
throw new Meteor.Error(404, "Can't find my pants");
return "Coffee will be made at " + time;
}
Może makeCoffee jest rzeczywiście funkcją na serwerze. Dostęp klienta może być kontrolowany przez zawijanie go w metodzie, która sprawdza userId. Wywołania serwera zawsze idą prosto do funkcji. – user728291
Prawda, to jest rozwiązanie, które prawdopodobnie wykorzystam. Ale rezygnuję z zalet metod meteorologicznych, takich jak użycie this.unblock() do uruchamiania wielu metod w różnych włóknach. – Dsyko