2017-10-01 3 views
1

Ich versuche, eine Admin-Dashboard in react und Meteor nur angezeigt werden, wenn der aktuellen Benutzer ein Admin ist.Reagieren: Wie sicher eine Komponente zur Anzeige nach Benutzerrolle

Ich rufe eine Servermethode auf, die die Benutzerberechtigung überprüft und die Admin-Komponente nur dann rendert, wenn diese Methode true zurückgibt.

Dieser Serveraufruf ist asynchron und daher wird die Komponente nicht gerendert, normalerweise verwalte ich diesen asynchronen Anruf mit Status, aber ich möchte hier nichts im Status anzeigen (möchte nicht, dass jemand den Status und den Zugriff ändert) das Admin-Dashboard). Hier

ist der Code:

export default class AdminChecker extends Component { 
    isItAdmin() { 
    // Get the id of current user 
    const userId = Meteor.userId(); 
    if (userId) { 
     // call a server method which returns true if current user is Admin 
     Meteor.call('checkAdminId', userId, (err, authorized) => { 
     if (err) { 
      console.log(err); 
      return null; 
     } 
     return (authorized) ? <AdminDashboard /> : null; 
     }); 
    } 
    } 
    render() { 
    return (
     <div className="admin-temp-container"> 
     {this.isItAdmin()} 
     </div> 
    ); 
    } 
} 

Ich glaube, ich diese Logik in einer übergeordneten Komponente haben kann und das Ergebnis der isItAdmin-adminDashboard als Stütze senden (die adminDashboard Komponente würde nur Informationen angezeigt, wenn seine Requisiten true).

Aber ich bin sicher, wenn das sicher ist. Könnte man die Requisiten mit Chrome reagieren, Entwickler-Tools oder so ähnlich?

Vielen Dank

+1

Ja, eine Stütze kann mit wenig Aufwand in der Konsole geändert werden. Ihre Vorgehensweise ist nicht besonders sicher, könnte aber für Ihre Bedürfnisse ausreichen. – px1mp

+1

Es ist sehr schwierig, Clientkomponenten abhängig von einem booleschen Flag zu erstellen, das eine Administratorrolle angibt. Sie müssen definitiv für alles eine Methode Gegenstück, weil Sie annehmen müssen, dass jemand es macht, um die Verwaltungsrolle auf der Klientenseite zu fälschen – Jankapunkt

+1

Ich weiß nicht, ob das Ihnen helfen wird, aber normalerweise in meinen Projekten verwende ich den redux Speicher Holen Sie sich die Rolle des Benutzers und ich schreibe eine Komponente höherer Ordnung, die den Status aus dem Redux-Speicher liest und die richtige Komponente darstellt, und natürlich müssen die redux-Devtools nur im Entwicklungsmodus aktiviert werden. –

Antwort

2

Ich denke, es gibt zwei Teile dieses (und die Kommentare sind an beiden Hinting):

Zuerst sollten Sie nicht erwarten zu können, die Sicherheit auf dem Client erzwingen. Sie müssen die Zugriffssteuerungslogik auf dem Server implementieren (d. H. Jede API, die eine Administratoraktion ausführt, muss überprüfen, ob der Benutzer, der die Aktion ausführt, ein Administrator ist).

Sobald Sie das getan haben (und vielleicht schon haben), dann müssen Sie wahrscheinlich Requisiten oder Status verwenden, um zu speichern, ob der Benutzer ein Administrator ist oder nicht (genau wie Sie andere Daten in Ihrer App speichern würden) .

Der entscheidende Punkt ist, dass, sobald Sie die Sicherheit auf dem Server erzwingen, es nicht wirklich von Bedeutung ist, wenn ein Benutzer den Status ändert, um zum Admin-Dashboard zu gelangen: Der Server lässt den Benutzer keine echten Daten anzeigen oder nehmen irgendwelche Aktionen sowieso.

Dies ist völlig unabhängig von serverseitigen Rendering. Sie können sicherlich ein sicheres Verwaltungs-Dashboard ohne serverseitiges Rendern erstellen, solange die APIs, die zum Abrufen der Administratordaten und zum Ausführen von Administratoraktionen verwendet werden, ihre eigenen Zugriffssteuerungsüberprüfungen implementieren.

+0

Ich stimme Ihnen vollkommen zu, aber die Frage selbst war nicht die Implementierung von serverseitigen Prüfungen oder so ähnlich. Die Frage lautete: "Ist es eine sichere Methode, _UI-Komponente_ auf _client_ anzuzeigen/zu verbergen, basierend auf der Rolle des Benutzers". Zu meiner Antwort lautet: "Es ist niemals sicher, dem Kunden zu vertrauen". Für diese spezielle Frage ist die einzige sichere Lösung eine SSR. – Styx

+0

Ich nehme an, dass SSR als Workaround für die Zugriffssteuerung beim Abrufen der Daten zum Auffüllen des Administrator-Dashboards verwendet werden kann. Aber was ist mit dem Aufruf von APIs, um Aktionen auszuführen? Ich nehme an, Sie wären nicht in der Lage, AJAX zu verwenden ... Sie müssten HTML-Formulare oder so etwas verwenden. –

+0

Auch wenn Sie alles getan haben, um die clientseitige Zugriffskontrolle zu implementieren, haben Sie immer noch das Problem, dass Sie einen Dienst haben, der es beliebigen Benutzern erlaubt, Admin-Aktionen durchzuführen. Dann setzen Sie sich einer Vielzahl von Sicherheitslücken aus. Sie müssen beispielsweise den Internetzugang für den Dienst sperren (falls jemand die API entdeckt). Aber selbst dann würde jede beliebige Codeausführungsschwachstelle in Ihrer Umgebung Zugriff auf diese Verwaltungsfunktionen gewähren. –

Verwandte Themen