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

Orchardcms 如何删除Orchard CMS中的有效权限,orchardcms,user-roles,Orchardcms,User Roles,我不想在创建角色权限时设置有效权限。我只想设置“允许”复选框选项 当我选中“站点所有者权限”时,自动选中所有有效复选框。我不想选择有效的选项 请参考所附图片 角色有效复选框图像: 有没有关于我可能做错了什么的建议?谢谢。每个模块都可以定义自己的权限,有效权限根据权限定义确定: Orchard支持所谓的,也有硬编码的东西,比如管理员角色可以做任何事情 我也遇到了这个问题,通过使用自定义授权事件处理程序来避免硬编码的管理员角色处理,我解决了这个问题: public abstract class

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

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

请参考所附图片

角色有效复选框图像:


有没有关于我可能做错了什么的建议?谢谢。

每个模块都可以定义自己的权限,有效权限根据权限定义确定:

Orchard支持所谓的,也有硬编码的东西,比如管理员角色可以做任何事情

我也遇到了这个问题,通过使用自定义授权事件处理程序来避免硬编码的管理员角色处理,我解决了这个问题:

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;
}
公共抽象类ExplicitPermissionAuthorizationEventHandler:Orchard.Security.IAAuthorizationServiceEventHandler
{
//公开的
public ExplicitPermissionAuthorizationEventHandler(Orchard.Data.IRepository aUserRolesPartRecords)
{
mUserRolesPartRecords=aUserRolesPartRecords;
}
公共无效检查(Orchard.Security.CheckAccessContext aContext){}
public void Adjust(Orchard.Security.CheckAccessContext aContext){}
公共无效完成(Orchard.Security.CheckAccessContext)
{
if(aContext.grated&&IsModulePermission(aContext.Permission)&&aContext.User!=null)
{
var lIsAdministrator=mUserRolesPartRecords.Fetch(r=>r.UserId==aContext.User.ContentItem.Id&&r.Role.Name==“管理员”).Any();
if(LISA管理员)
{
//检查当用户担任“管理员”角色时,权限是否显式分配为Orchard默认授予所有权限
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();
如果(!lHasPermissionExplicitly)
aContext.grated=false;
}
}
}
//保护
受保护的抽象bool IsModulePermission(Orchard.Security.Permissions.Permission);
受保护的抽象字符串ModuleName{get;}
//私人的
private Orchard.Data.i存储博物馆RorrolesPartRecords;
}

这将使您了解如何使用授权处理程序。

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