使用Catalyst :: Model :: MenuGrinder

时间:2011-06-06 18:00:18

标签: perl catalyst

我正在尝试使用Catalyst::Model::MenuGrinder向我的WebApp添加动态菜单 关于如何使用此模型配置对via角色的访问,文档不是很清楚。 有没有人使用这个模型实现动态菜单? 我在Catalyst Advent calendar中找到了这篇文章,并且已经正确设置了我只是不知道如何配置它来限制基于角色的菜单选项。

任何帮助将不胜感激 感谢

2 个答案:

答案 0 :(得分:1)

RequirePrivilege模块中所述,您可以通过添加need_privneed_user_in_realm等密钥来限制基于权限的菜单条目。 MenuGrinder“privileges”对应于Catalyst身份验证“角色”,因此如果您要求用户具有某个部分的“admin”角色,您只需执行

<item>
    <label>Admin Section</label>
    <need_priv>admin</need_priv>
    <item>...</item>
    <item>...</item>
</item>

答案 1 :(得分:0)

只需查看实际生成菜单的模板文件即可。例如,我们应该只为管理员显示“衣服”菜单。 您可以编辑xml文件,例如:

<item role="adminonly"><label>Clothes</label>...

之后,如果用户具有所需角色,则只应检查菜单项BLOCK:

[% BLOCK menuitem %]
<ul [%- IF menu.class %]class="[% menu.class %]"[% END %]>
[% FOREACH item = menu.item %]
[% IF item.role %]
    [% IF c.user_exists && c.check_user_roles( item.role ) %]
    <li [% IF item.active %]class="active"[% END %]>
      <a href="[% item.target %]">[% item.label %]</a>
      [% IF item.item %]
      [% PROCESS menuitem
         menu = item
      %]
    [% END %]
    </li>
    [% END %]
[% END %]
[% END %]
</ul> 
[% END %]

[% PROCESS menuitem %]

PS:从未测试过以上代码