Behörigheter
Så snart ett system har mer än en användare blir man tvungen att fundera över behörigheter, i Dynamix finns flera inbyggda behörigheter, bl a för att begränsa vem som får se innehållet på en sida, vem som får redigera en sida och vem som får logga in i Dynamix-gränssnittet. När man bygger nya funktioner för en sajt är det ofta lämpligt att även skapa behörigheter för att t ex reglera vilka användare som ska kunna lägga upp nya nyheter eller under vilka bloggkategorier en viss användare kan skapa nya inlägg.
Dynamix har två olika sorters behörigheter, objektbehörigheter och systembehörigheter. Skillnaden är, som man kan gissa, att en objektbehörighet är kopplad till ett objekt, t ex att användare A har rätt att redigera sida 1, medan en systembehörighet är "global", t ex att användare A har rätt att administrera nyheter.
Skapa behörigheter
För att skapa en ny behörighet behöver du skapa en ny objekttyp som ärver från Dynamix.Privilege, eller en undertyp till Privilege, systembehörigheter ska ärva från Dynamix.SystemPrivilege. En behörighet bör även vara ett Singleton-objekt. Det enklaste sättet att börja är att använda mallen för behörigheter genom att välja Add - New Item och välja Dynamix Privilege bland Dynamix-mallarna.
Om du har gjort en ny objektbehörighet som ska kunna sättas på objekt av en viss typ måste du även ange att objekttypen stöder behörigheten. Detta gör man genom att se till att behörigheten finns med bland de behörigheter som returneras av metoden GetApplicablePrivileges.
public override IEnumerable<Privilege> GetApplicablePrivileges()
{
// Yield the privileges applicable to PrivilegeExample
yield return MyPrivilege.Instance;
// If we want to keep privileges from the base class we need to yield those too
foreach( var privilege in base.GetApplicablePrivileges() )
yield return privilege;
}
Administrera behörigheter
Behörigheter kan sättas på grupper eller användare. För att sätta objektbehörigheter med kod lägger man till dem till (eller tar bort från) Privileges-kollektionen för objektet. När det är en systembehörighet använder man AddSystemPrivilege respektive RemoveSystemPrivilege på användaren/gruppen. Observera att objektet måste vara skrivbart när det är en objektbehörighet och användar-/grupp-objektet måste vara skrivbart när det är en systembehörighet samt att DB_Save måste köras för att de nya inställningarna ska sparas.
// Assign the privilege MyPrivilege on the object to users in the group
obj.Privileges.Add( group, MyPrivilege.Instance );
obj.DB_Save();
// Assign the system privilege MySystemPrivilege to the user
user.AddSystemPrivilege( MySystemPrivilege.Instance );
user.DB_Save();
Om du har gjort en hanteringsdialog för objekt av en viss typ finns det som standard en knapp i verktygsfältet för att redigera behörigheter för enstaka objekt. Här syns alla behörigheter som returneras av GetApplicablePrivileges.
Om användaren eller gruppen du vill administrera rättighteter för inte finns med i listan kan du lägga till den med knappen bredvid listan.
För att hantera systembehörigheter använder du användarverktyget, markerar en användare eller grupp och klickar på "Behörigheter"
Kontrollera behörigheter
För att kontrollera att en användare har en viss behörighet kan du använda CurrentUserHasPrivilege eller UserHasPrivilege på objektet, om det är en systembehörighet använder du HasSystemPrivilege på användarobjektet.
// Do something if user has privilege MyPrivilege on obj
if( obj.CurrentUserHasPrivilege( MyPrivilege.Instance ) )
{
// do something
}
// Do something if user has system privilege MySystemPrivilege
if( user.HasSystemPrivilege( MySystemPrivilege.Instance ) )
{
// do something
}