Regeln über C#

<< Click to Display Table of Contents >>

Regeln über C#

Schreiben Sie ein C# Script, welches die Berechtigungen für einen konkreten Webbenutzer erzeugt.

Alle notwendigen Parameter und Funktionen befinden sich in der Variable ctx von Typ rimacon.cmdb.scripting.DYNROBJ.Context

 

Die Logik ist ähnlich wie bei den Regeln über T-SQL, statt „insert“ sollte das Script die Funktion ctx.AddRights oder ctx.AddRightsForAllCIs aufrufen.

 

Hinweis: Für eine Tabelle oder für Menügruppen könne mehrere Regeln über C# definiert werden.

 

Hinweis: In C# kann zwar die Datenbank über die Kontextvariable db genutzt werden, dies ist aber nicht gewollt. Wir empfehlen, das Feature „SQL Result Cache“ zu nutzen. Die Datenbank sollte nur für einfache Abfragen genutzt werden. Wenn dies nicht möglich ist und kompliziertere SQL-Abfragen benötigt werden, empfehlen wir, die „Regeln über T-SQL“ zu nutzen.

 

Zusätzlich bietet C# mehrere Optimierungsmöglichkeiten:

 

a.Wenn die Berechtigungen für ein konkretes CI gefordert werden, steht die CI-ID in ctx.OneCIOnly . Die Scripte können entsprechend optimiert werden. Im Übrigen ist ctx.OneCIOnly gleich 0.

 

b.Für die Fälle „Webbenutzer hat für alle CIs der Tabelle eine konkrete Berechtigung“ kann die Funktion ctx.AddRightsForAllCIs genutzt werden. Dies ist aus Performancesicht deutlich besser als die T-SQL-Konstruktion „insert into #new_rights (objid, attr) select HWM_ID, 1+4 from HWM“

 

c.Die Funktion ctx.NecessaryRightsReached() gibt zurück, ob die aus dem Kontext geforderten Berechtigungen erreicht wurden.  Daher ist ein weiteres Erzeugen von Berechtigungen nicht notwendig.

 

d.Über cmdb.Rights.HasWebuserRole kann ermittelt werden, ob der Webbenutzer eine konkrete Rolle hat. Diese Ermittlung erfordert keinen DB-Zugriff, da die Beziehungen gecached werden.

 

e.In C# ist es möglich, das Feature „SQL Result Cache“ zu benutzen und die Berechtigungen in C# ohne DB-Zugriff zu erzeugen. Diese Problematik ist etwas komplizierter, bei Fragen wenden Sie sich bitte an den Support, wir helfen Ihnen gern.

 

Beispiel: Mitarbeiter der Gruppe “admin” dürfen alle Rechner sehen und bearbeiten.

 

if (cmdb.Rights.HasWebuserRole(ctx.AnwID, "admin"))

ctx.AddRightsForAllCIs(cmdb.Rights.SELECT | cmdb.Rights.UPDATE);