【问题标题】:SilverStripe field-level Page editing permissionsSilverStripe 字段级页面编辑权限
【发布时间】:2018-09-25 19:53:21
【问题描述】:

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

假设我有一个ArticlePage.php 模型。它有$MenuTitle$Content 等常用字段,我还添加了$Subtitle$Author 等其他属性。

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

我需要做的是:

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

  • 其他权限组中的用户应该只能编辑和保存$Subtitle

这在 SilverStripe 3.2 中是否可行?有 SilverStripe 的方法吗?

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

提前致谢。

【问题讨论】:

    标签: silverstripe


    【解决方案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 专家是否可以证实这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 2018-12-31
      • 2013-12-22
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多