2016-08-09 5 views
1

Я не хочу устанавливать эффективное разрешение при создании разрешений для ролей. Я хочу установить только для выбора флажка allow.Как удалить эффективное разрешение в Orchard CMS

Когда я проверяю «Разрешения владельца сайта», автоматически выбирается для всех флажков «Эффективный». Я не хочу выбирать Эффективный выбор.

См. Прилагаемое изображение.

Ролевая Эффективное Флажок изображение:

enter image description here

Любое предложение о том, что я могу делать неправильно? Благодарю.

+2

Разрешение владельца сайта является самым мощным. Если вы хотите иметь более тонкий контроль над каждой настройкой, просто не проверяйте это разрешение. – Xceno

+0

Я действительно ничего не проверял. только я проверяю выбор для разрешения владельца сайта. других я не проверял. но в эффективном флажке проверяется на основании разрешения владельца сайта. –

+0

Правильно, так почему вы проверили разрешение владельца сайта на эту роль? –

ответ

1

Каждый модуль может определить свои собственные права и эффективное разрешение определяется на основании определения разрешения:

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

Orchard поддерживает так называемые ImpliedBy permissions и там также зашиты такие вещи, как Administator роль может сделать что-нибудь.

Я боролся с этой проблемой тоже, и я решил его с помощью пользовательского обработчика событий авторизации, чтобы избежать жёстко прописанные обработки 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; 
} 

Это вы должны получить представление о том, как использовать обработчики авторизации.