我需要在SilverStripe 3.2网站中的Page模型中实现字段级权限。
假设我有一个ArticlePage.php
模型。它具有通常的字段,例如$MenuTitle
和$Content
,并且我添加了其他属性,例如$Subtitle
和$Author
。
我可以使用providePermissions()
和相关的canEdit()
方法来保护整个模型,但是我需要保护单个字段/页面属性。
我需要做的是:
管理员应该能够编辑所有字段
另一个权限组中的用户只能编辑和保存$Subtitle
在SilverStripe 3.2中有可能吗?有 SilverStripe 方法吗?
如果没有,是否可以识别当前用户的用户组,然后有条件地显示$field->addFieldToTab()
代码?是否有可能通过恶意发布数据来阻止用户保存字段,也许是通过检查器添加丢失的字段?
谢谢。
答案 0 :(得分:1)
所以这是我自己的答案。这篇文章很有帮助:https://www.silverstripe.org/community/forums/customising-the-cms/show/11693
您可以使用如后所述的代码有条件地显示CMS字段和标签:
public function getCMSFields()
if(!Permission::check('PERMISSION_LABEL'){
$fields->removeFieldFromTab("Root.Main","MenuTitle");
$fields->removeByName('BannerImages');
// etc...
}
// etc...
}
已定义权限:
public function providePermissions()
{
return array(
'PERMISSION_LABEL' => 'Can edit some fields',
);
}
我对这种方法的担心是,用户仍然可以使用检查器或JS在页面上创建一个表单字段,并为他们不应看到的字段提交值。
对此进行了测试,似乎 如果未在页面上列出字段值,则不会保存它们,而是将其与POST数据一起发送。尽管我很想知道SilverStripe专家是否可以确认这一点。