2016-08-09 1 views
1

Je ne veux pas définir l'autorisation effective lors de la création des autorisations de rôle. Je veux définir uniquement pour la sélection de case à cocher autoriser.Comment faire pour supprimer l'autorisation effective dans Orchard CMS

Lorsque je coche les «Autorisations du propriétaire du site», automatiquement sélectionné pour toutes les cases en vigueur. Je ne veux pas sélectionner la sélection Effective.

Veuillez vous référer à l'image ci-jointe.

case rôle efficace l'image:

enter image description here

Toute suggestion sur ce que je pourrais faire mal? Merci.

+2

La permission du propriétaire du site est la plus puissante. Si vous souhaitez avoir un contrôle plus fin sur chaque paramètre, ne vérifiez pas cette autorisation. – Xceno

+0

En fait, je n'ai rien vérifié d'autre. seulement je vérifie la sélection pour la permission de propriétaire de site case à cocher. D'autres je n'ai pas vérifié. mais dans la case à cocher effective cochée en fonction de l'autorisation du propriétaire du site. –

+0

Bon, alors pourquoi avez-vous vérifié l'autorisation du propriétaire du site pour ce rôle? –

Répondre

1

Chaque module peut définir ses propres autorisations et l'autorisation effective est déterminée en fonction des définitions d'autorisation:

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

Orchard soutient que l'on appelle ImpliedBy permissions et il y a aussi des choses hardcoded comme rôle Administator peut faire quoi que ce soit.

je me débattais avec cette question aussi, et je l'ai résolu en utilisant un gestionnaire d'événements d'autorisation personnalisée pour éviter la manipulation du rôle hardcoded administator:

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; 
} 

Cela devrait vous faire une idée comment utiliser des gestionnaires d'autorisation.