【问题标题】:How to remove the Effective Permission in Orchard CMS如何在 Orchard CMS 中删除有效权限
【发布时间】:2018-02-20 17:50:13
【问题描述】:

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

当我选中“站点所有者权限”时,会自动选中所有有效复选框。我不想选择有效选择。

请参考附图。

作用有效的复选框图像:

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

【问题讨论】:

  • 网站所有者权限是最强大的。如果您想更好地控制每个设置,请不要检查该权限。
  • 是的,实际上我没有检查其他任何内容。只有我检查网站所有者权限复选框的选择。其他我没有检查。但在根据站点所有者权限选中的有效复选框中。
  • 对,那您为什么要检查该角色的站点所有者权限?
  • 我已经为我的论坛概念自定义了从文本框到下拉列表的站点所有者选项。所以我需要为一个特定角色启用站点所有者。如果我只选择站点所有者复选框,它将被放置在屏幕上。这就是为什么我需要选择它。那么有没有可能满足我的要求。

标签: orchardcms user-roles


【解决方案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;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多