我有一个自定义模块,用几乎相同的代码替换默认的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
- 我希望将其放入模块中,但我会等待它,直到我以默认方式(在主题中)工作。
所以我现在的问题是:为了找到并使用包装器我缺少什么?
答案 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>
希望这有帮助