SilverStripe字段级页面编辑权限

时间:2018-09-25 19:53:22

标签: silverstripe

我需要在SilverStripe 3.2网站中的Page模型中实现字段级权限。

假设我有一个ArticlePage.php模型。它具有通常的字段,例如$MenuTitle$Content,并且我添加了其他属性,例如$Subtitle$Author

我可以使用providePermissions()和相关的canEdit()方法来保护整个模型,但是我需要保护单个字段/页面属性。

我需要做的是:

  • 管理员应该能够编辑所有字段

  • 另一个权限组中的用户只能编辑和保存$Subtitle

在SilverStripe 3.2中有可能吗?有 SilverStripe 方法吗?

如果没有,是否可以识别当前用户的用户组,然后有条件地显示$field->addFieldToTab()代码?是否有可能通过恶意发布数据来阻止用户保存字段,也许是通过检查器添加丢失的字段?

谢谢。

1 个答案:

答案 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专家是否可以确认这一点。