如何删除Orchard CMS中的有效权限

时间:2016-08-09 06:21:10

标签: orchardcms user-roles

我不想在创建角色权限时设置有效权限。我只想设置允许复选框。

当我检查"网站所有者权限" ,自动选中所有有效复选框。我不想选择有效选择。

请参阅附图。

角色效果复选框图片:

enter image description here

关于我可能做错什么的任何建议?感谢。

1 个答案:

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

这可以让您了解如何使用授权处理程序。