0

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

由于在使用我的自定义模块时角色被替换(并且功能已启用),我想在“编辑用户”页面上隐藏角色。在了解位置信息之后,我可以在自定义模块的位置信息中使用以下内容成功隐藏角色列表:

<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- 我希望将它放入模块中,但我会等到它以默认方式(在主题中)工作。

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

4

1 回答 1

1

好吧,它无法正常工作的原因是您的主题没有在管理员中应用。管理主题是。所以你可以把你的代码放在管理主题中,然后它就可以工作了。如果这是您要走的路线,最好创建自己的管理主题。

如果你想把它放在一个模块中,你需要确保你的模块依赖于 Orchard.Roles 否则 Orchard.Roles 放置将优先。因此,在您的 module.txt 中,您将需要这一行:

Dependencies: Orchard.Roles

放置文件:

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

然后你的包装器将在你的视图文件夹中,并调用 Wrappers.HideIfCondition.cshtml 类似的东西:

@using Orchard.ContentManagement;

@{
    var condition = true;
}

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

<p>I am a wrapper</p>

希望这可以帮助

于 2013-05-09T20:17:04.947 回答