我不想在创建角色权限时设置有效权限。我只想设置允许复选框。
当我检查"网站所有者权限" ,自动选中所有有效复选框。我不想选择有效选择。
请参阅附图。
角色效果复选框图片:
关于我可能做错什么的任何建议?感谢。
答案 0 :(得分:1)
每个模块都可以定义自己的权限,并根据权限定义确定有效权限:
http://docs.orchardproject.net/en/latest/Documentation/Custom-permissions/
Orchard支持所谓的ImpliedBy permissions,还有管理员角色可以做任何事情的硬编码。
我也在努力解决这个问题,我通过使用自定义授权事件处理程序来解决它,以避免硬编码的管理员角色处理:
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;
}
这可以让您了解如何使用授权处理程序。