Appfuse的权限控制依赖于Struts的Menu机制,common下的menu.jsp是对菜单顺序的定义,详细的菜单项和菜单链接及权限再menu-config.xml中控制,如下:
<Menu name="Logout" title="user.logout" page="/logout" roles="ROLE_ADMIN,ROLE_USER,ROLE_PRODUCT" />
roles中的值即是role表中的name,给那个角色分配菜单的权限,则把角色的name加入到菜单定义的roles中即可。
但使用过程中会发现,这样定义好之后菜单出来是乱的,源自appfuse中的一个Bug,修改文件navbarMenu.vm即可,如下:
1 #macro( displayNavbarMenu $menu $count) 2 #if ($displayer.isAllowed($menu)) 3 #set ($count = $count + 1) 4 ## set menu title 5 #set ($title = $displayer.getMessage($menu.title)) 6 #if (!$menu.url) #set ($url="javascript:void(0)") #else #set ($url=$menu.url) #end 7 8 ## create a single menu item 9 #if ($menu.components.size() == 0) 10 <li class="#if ($menu.name == $currentMenu)active#end"> 11 <a href="$url" title="$title" #if($menu.target)target="$menu.target" #end#if($menu.width)style="width: ${menu.width}px"#end>${title}</a> 12 #else ## create multiple menu items in a menu 13 #if ($menu.components.size() > 0) 14 #set ($hasViewableChildren = false) 15 #set ($renderedChildren = 0) 16 #foreach ($menuIt in $menu.components) 17 #if ($displayer.isAllowed($menuIt)) 18 #set($hasViewableChildren = true) 19 #set($renderedChildren = $renderedChildren + 1) 20 #end 21 #end 22 #end 23 24 <li#if ($hasViewableChildren) class="dropdown#if ($menu.name == $currentMenu) active#end"#end> 25 <a href="#" title="$title" 26 #if($menu.target)target="$menu.target" #end 27 #if($menu.width)style="width: ${menu.width}px"#end 28 class="dropdown-toggle" data-toggle="dropdown">${title}</a> 29 #end 30 31 #if ($menu.components.size() > 0) 32 #if ($hasViewableChildren) 33 <ul class="dropdown-menu"> 34 #end 35 36 #set ($count = 0) 37 #foreach ($menuIt in $menu.components) 38 #displayNavbarMenu($menuIt, $count) 39 #end 40 41 #if ($hasViewableChildren && ($count == $renderedChildren)) 42 </ul></li> 43 #else 44 </ul> 45 #if ($count > $renderedChildren) 46 </li> 47 #end 48 #end 49 #else 50 </li> 51 #if ($menu.parent && $count == $menu.parent.components.size()) 52 ##</ul> 53 #end 54 #end 55 #end 56 #end 57 58 #displayNavbarMenu($menu, 0)