使用包装器有条件地隐藏“编辑用户”页面上的角色

时间:2013-05-06 15:11:19

标签: orchardcms orchardcms-1.6

我有一个自定义模块,用几乎相同的代码替换默认的RolesBasedAuthorizationService,不同的是,当我的自定义模块启用时,它将从服务而不是从用户中提取角色。启用该服务涉及填写“设置”中的信息并选中一个框。

由于在使用我的自定义模块时替换了角色(并且启用了该功能),因此我想在“编辑用户”页面上隐藏角色。在Understanding placement info之后,我可以在自定义模块的placement.info中使用以下内容成功隐藏角色列表:

<Match ContentType="User">
  <Place Parts_Roles_UserRoles_Edit="-" />
</Match>

但是,只要启用了模块的功能,就会隐藏列表。但是启用的功能并不是要使该功能发挥其魔力所必需的 - 还必须检查该复选框(它提供了在打开基于服务的授权之前输入所需设置的能力)。因此,继续使用相同的文档,我可以创建一个包装器并像这样应用它:

<Match ContentType="User">
  <Place Parts_Roles_UserRoles_Edit="Content:10;Wrapper=Wrapper_HideIfCondition" />
</Match>

这应该允许我像这样包装角色列表:

<div style="display: block">
    @Model.Html
</div>

我目前正在使用display: block来确保调用包装器;然而,角色列表消失了 - 看起来Orchard没有找到包装器。 cshtml文件存在于MyCurrentTheme\Views\Wrapper.HideIfCondition.cshtml - 我希望将其放入模块中,但我会等待它,直到我以默认方式(在主题中)工作。

所以我现在的问题是:为了找到并使用包装器我缺少什么?

1 个答案:

答案 0 :(得分:1)

嗯,目前无法正常运行的原因是您的主题未在管理员中应用。管理主题是。所以你可以把你的代码放在管理主题中,然后就行了。如果这是您要去的路线,最好创建自己的管理主题。

如果你想把它放在一个模块中,你需要确保你的模块依赖于Orchard.Roles其他Orchard.Roles放置将优先考虑。所以在你的module.txt中你需要这一行:

Dependencies: Orchard.Roles

展示位置文件:

 <Match ContentType="User">
  <Place Parts_Roles_UserRoles_Edit="Content:10;Wrapper=Wrappers_HideIfCondition" />
 </Match>

然后你的包装器将在你的views文件夹中,并用以下内容调用Wrappers.HideIfCondition.cshtml:

@using Orchard.ContentManagement;

@{
    var condition = true;
}

@if(condition)
{
    @Display(Model.Metadata.ChildContent)
}

<p>I am a wrapper</p>

希望这有帮助