Каждый модуль может определить свои собственные права и эффективное разрешение определяется на основании определения разрешения:
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;
}
Это вы должны получить представление о том, как использовать обработчики авторизации.
Разрешение владельца сайта является самым мощным. Если вы хотите иметь более тонкий контроль над каждой настройкой, просто не проверяйте это разрешение. – Xceno
Я действительно ничего не проверял. только я проверяю выбор для разрешения владельца сайта. других я не проверял. но в эффективном флажке проверяется на основании разрешения владельца сайта. –
Правильно, так почему вы проверили разрешение владельца сайта на эту роль? –