2016-08-09 18 views
1

Ich möchte nicht die effektive Berechtigung beim Erstellen der Rolle Berechtigungen festlegen. Ich möchte nur für die Auswahl der Checkbox erlauben.So entfernen Sie die effektive Berechtigung in Orchard CMS

Wenn ich die "Site Owner Permissions" überprüft, wird automatisch alle Kontrollkästchen aktiviert. Ich möchte nicht die effektive Auswahl auswählen.

Bitte beachten Sie das beigefügte Bild.

Rollen Wirksame Kontrollkästchen Bild:

enter image description here

Jeder Vorschlag auf, was ich tun könnte falsch? Vielen Dank.

+2

Die Erlaubnis des Seitenbesitzers ist die mächtigste. Wenn Sie jede Einstellung genauer steuern möchten, überprüfen Sie diese Berechtigung nicht. – Xceno

+0

Ya eigentlich habe ich nichts anderes überprüft. nur ich überprüfe Auswahl für Erlaubnis des Inhabers des Aufstellungsortes. andere habe ich nicht überprüft. aber in der effektiven Checkbox basierend auf der Erlaubnis des Seitenbesitzers überprüft. –

+0

Richtig, warum haben Sie die Berechtigung des Websitebesitzers für diese Rolle überprüft? –

Antwort

1

Jedes Modul kann definieren einen eigenen Berechtigungen und die effektive Berechtigung ist auf die Berechtigungsdefinitionen bestimmt basierend:

http://docs.orchardproject.net/en/latest/Documentation/Custom-permissions/

Orchard unterstützt so ImpliedBy permissions genannt und es gibt auch Sachen wie Administator Rolle fest einprogrammiert alles tun kann.

ich mit diesem Problem zu kämpfen zu, und ich löste es durch einen benutzerdefinierten Berechtigungsereignishandler mit der fest codierten Administator Rolle Handhabung zu vermeiden:

public abstract class ExplicitPermissionAuthorizationEventHandler : Orchard.Security.IAuthorizationServiceEventHandler 
{ 
    // public 
    public ExplicitPermissionAuthorizationEventHandler(Orchard.Data.IRepository<Orchard.Roles.Models.UserRolesPartRecord> aUserRolesPartRecords) 
    { 
     mUserRolesPartRecords = aUserRolesPartRecords; 
    } 

    public void Checking(Orchard.Security.CheckAccessContext aContext) {} 
    public void Adjust(Orchard.Security.CheckAccessContext aContext) {} 

    public void Complete(Orchard.Security.CheckAccessContext aContext) 
    { 
     if (aContext.Granted && IsModulePermission(aContext.Permission) && aContext.User != null) 
     { 
     var lIsAdministrator = mUserRolesPartRecords.Fetch(r => r.UserId == aContext.User.ContentItem.Id && r.Role.Name == "Administrator").Any(); 

     if (lIsAdministrator) 
     { 
      // check whether permission is explicitly assigned as Orchard grants all permissions by default when user is in role "Administrator" 

      var lHasPermissionExplicitly = mUserRolesPartRecords.Fetch(r => r.UserId == aContext.User.ContentItem.Id && 
      r.Role.RolesPermissions.Any(p => p.Permission.FeatureName == ModuleName && p.Permission.Name == aContext.Permission.Name)).Any(); 

      if (!lHasPermissionExplicitly) 
      aContext.Granted = false; 
     } 
     } 
    } 

    // protected 
    protected abstract bool IsModulePermission(Orchard.Security.Permissions.Permission aPermission); 
    protected abstract string ModuleName { get; } 

    // private 
    private Orchard.Data.IRepository<Orchard.Roles.Models.UserRolesPartRecord> mUserRolesPartRecords; 
} 

Dies sollten Ihnen eine Vorstellung bekommen, wie Berechtigungs Handler zu verwenden.