我正在使用Lift快速推送一个CRUDify应用程序,我需要对其中一个数据库表进行只读访问。
我已经研究了如何通过在映射器对象中将calcCreateItem
设置为Empty
来从导航菜单中删除该表的“创建”选项。
但是,为了使其成为只读,我还需要删除该表的CRUDify表单的每一行上的“编辑”和“删除”链接。我想继续删除“查看”链接,当我在它时(所有表格的字段已经显示在列表表格中)...但如果我必须,我可以使用“查看”链接
是否有人知道如何使CRUDify“列表”表单上的记录不包含每行最右侧的“查看”/“编辑”/“删除”链接?
答案 0 :(得分:3)
Kim的IfValue解决方案可能是最简洁的,但对于新手来说可能不是最容易理解的。您也可以在您的实体上override def _showAllTemplate
。它在Crudify特征中定义如下,因此您可以删除链接TD。请注意,即使链接没有出现在模板中,它们仍然可以访问,因此您需要从SiteMenu中阻止它们。要做到这一点,最好只是覆盖菜单locs而不是calcCreateItem方法。
override def createMenuLoc: Box[Menu] = Empty
override def editMenuLoc: Box[Menu] = Empty
override def viewMenuLoc: Box[Menu] = Empty
def _showAllTemplate =
<lift:crud.all>
<table id={showAllId} class={showAllClass}>
<thead>
<tr>
<crud:header_item><th><crud:name/></th></crud:header_item>
<th> </th>
<th> </th>
<th> </th>
</tr>
</thead>
<tbody>
<crud:row>
<tr>
<crud:row_item><td><crud:value/></td></crud:row_item>
<td><a crud:view_href="">{S.??("View")}</a></td>
<td><a crud:edit_href="">{S.??("Edit")}</a></td>
<td><a crud:delete_href="">{S.??("Delete")}</a></td>
</tr>
</crud:row>
</tbody>
<tfoot>
<tr>
<td colspan="3"><crud:prev>{previousWord}</crud:prev></td>
<td colspan="3"><crud:next>{nextWord}</crud:next></td>
</tr>
</tfoot>
</table>
答案 1 :(得分:0)
您可以覆盖editMenuLocParams
和deleteMenuLocParams
以删除编辑和删除链接。以下是我的一个项目的例子:
override def editMenuLocParams =
new Loc.IfValue[Exercise](deleteEditAllowed, errorAndRedirect _) ::
super.editMenuLocParams
另见scaladoc for Loc.IfValue。 deleteEditAllowed
是一个函数,它接受mapper类的Box并返回一个布尔值,指示是否允许编辑。 errorAndRedirect
的类型为() ⇒ LiftResponse
。它显示错误并重定向。