Laden...

Rechteverwaltung in einem Pluginsystem

Erstellt von Repac3r vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.631 Views
R
Repac3r Themenstarter:in
57 Beiträge seit 2014
vor 8 Jahren
Rechteverwaltung in einem Pluginsystem

Schönen Morgen euch,

icb benötige einen guten, aber vorallem sicheren Ansatz, mit diesem ich Rechte für einzelne Plugins setzen kann.

Das Pluginsystem habe ich schon auf Basis von MEF entwickelt. Plugins werden mittels einen Dependency Container mit einer "API" versorgt.
Nun habe ich mir überlegt, wie man am effektivsten dort eine Rechteverwaltung implementieren könnte.

Ich dachte mir, dass ich innerhalb des Dependency Containers, während dem Resolven folgende Dinge tuhe:

  • Nennen wir es mal "PermissionAttribute" aus der Klasse entnehmen, welche das Plugin gerne resolved haben möchte *Rechte des Plugins mittels einer PluginId aus einer Datenbank abhohlen *Vergleichen, ob die Rechte im Attribute mit den Rechten des Plugins übereinstimmen *Wenn Rechte korrekt sind, wird das Objekt zurück gegeben, ansonsten wirft der Container eine Exception o.ä

So in etwa würde ich mir das vorstellen. Einen kleinen Prototyp habe ich auch schon entwickelt, funktioniert auch, soweit ich das jedenfalls erkennen kann.
Meine eigentliche Frage ist, gibt es bessere Methoden, soetwas zu realisieren?

Grüße

P
1.090 Beiträge seit 2011
vor 8 Jahren

Grundlegend wirst du dir noch mal überlegen müssen ob du ein Nutzer- oder Rollenbasierterechteverwaltung haben willst.

Dann ist noch die Frage welche Technologie du Verwendest. Bei ASP gibt es ja schon ein Rechtesystem mit dem Membership- und Rollprovider. In WPF kann man es ähnlich gestalten.

Auch ist die Frage ob du es beim Laden der DLLs umsetzen willst, oder in der UI z.B. das Editieren einfach nicht erlauben willst. Entweder dadurch das die Menüpunkte nicht angezeigt werden oder die Controlls nicht Editierbar sind.

Wenn du es mit MEF machen willst würde ich es beim Laden des Cataloges machen. (Hier kannst du dir mal die Import/Export Attriebute anschauen). Da sollte es nur nötig sein ihn einmal pro Benutzer zu laden. Bei Benutzer wechsle wirst du ihn dann einmal neu laden müssen.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

R
Repac3r Themenstarter:in
57 Beiträge seit 2014
vor 8 Jahren

Was ich haben möchte, zumindest wie ich es mir Vorstelle ist folgendes:
Jedes Plugin stellt einen eigenen User dar. Jeder dieser User darf nur auf für ihn erlaubte Bereiche (Klassen) zugreifen.

Als Technologie verwende ich Asp.Net, jedenfalls den Web Api Teil. Die Schnittstellen werden über einen JS-Client aufgerufen. Die Plugins selbst stellen aber keine grafischen Erweiterungen dar, lediglich funktionelle. Dabei geht es konkret um dieses Situation:
Das ganze stellt einen Downloader dar. So, die Grundfunktion, nämlich das Downloaden ist implementiert. Nun möchte ein User ein Plugin erstellen, mit diesem gedownloadete Daten entpacket werden. Dieses Plugin stellt eine reine Funktion dar, keine Grafik. Um zu wissen, welche Daten das Plugin entpacken soll, muss dieses auf irgendwas wie einen Download-Manager zugreifen. Dieser Download-Manager wäre z.B eine solche Komponente bei dieser ich die Rechte definieren möchte. Ich als User will nicht, das bestimmte Plugins auf diesen Download-Manager zugreifen können. Prinzipiell hat aber jedes Plugin die Möglichkeit dazu, denn alle Abhängigkeiten werden über einen DI-Container aufgelöst.
Deswegen halte ich die Rechteverwaltung während dem auflösen von Komponenten im DI-Container am sinnvolsten.

Plugins werden von Anfang an geladen, da es für mich keinen Sinn macht, Plugins erst dann zu läden, wenn z.B.: ein bestimmtes Event aufgerufen wird. Zudem gibt es sicher auch Situationen, in diesen es sinnvoll ist, direkt am Programmstart bereit zu sein.

Grüße

5.658 Beiträge seit 2006
vor 8 Jahren

Hi Repac3r,

also ich werde aus deiner Erklärung nicht schlau. Widersprechen sich nicht diese beiden Aussagen:

Jedes Plugin stellt einen eigenen User dar.

Nun möchte ein User ein Plugin erstellen

Und was bedeutet in diesem Zusammenhang "ein Plugin erstellen"? Erstellen im Sinne von implementieren und bereitstellen oder im Sinne von anwenden?

Um zu wissen, welche Daten das Plugin entpacken soll, muss dieses auf irgendwas wie einen Download-Manager zugreifen.

Spätestens hier weiß ich nicht mehr, wovon du eigentlich redest. Plugins entpacken? Irgendwas wie ein Download-Manager? Hat das mit dem Client oder mit dem Server zu tun? Wie stellst du dir den Workflow vor? Wer entscheidet über die erforderlichen Rechte und wie ergeben sich die tatsächlich vorhandenen Rechte? Das sind doch die entscheidenden Fragen.

Ansonsten funktioniert eine Rechteverwaltung immer nach dem gleichen Schema: Wird eine Funktion aufgerufen, dann muß überprüft werden, welche Rechte der Benutzer besitzt, und welche Rechte für die Funktion erforderlich sind. Entweder hat der Benutzer alle erforderlichen Rechte und die Funktion kann aufgerufen werden, oder nicht. Wann die Plugins geladen werden, oder ob es einen JS-Client gibt, spielt in dem Zusammenhang überhaupt keine Rolle.

Christian

Weeks of programming can save you hours of planning