Разрешения на редактирование страниц на уровне полей SilverStripe - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно реализовать разрешения на уровне поля в модели страницы на веб-сайте SilverStripe 3.2.

Давайте представим, что у меня есть модель ArticlePage.php.У него есть обычные поля, такие как $MenuTitle и $Content, и я добавил другие свойства, такие как $Subtitle и $Author.

. Я могу защитить всю модель, используя providePermissions() и связанные с нейcanEdit() методов, но мне нужно защитить отдельные поля / свойства страницы.

Что мне нужно сделать, это:

  • Администраторы должны иметь возможность редактировать все поля

  • Пользователи в другой группе разрешений должны иметь возможность только редактировать и сохранять $Subtitle

Возможно ли это в SilverStripe 3.2?Есть ли SilverStripe способ сделать это?

Если нет, есть ли способ, которым я могу определить группу пользователей текущего пользователя и затем, возможно, условно показать код $field->addFieldToTab()?Можно ли остановить сохранение пользователем поля путем злонамеренной публикации данных, возможно, путем добавления отсутствующих полей через инспектор?

Заранее спасибо.

1 Ответ

0 голосов
/ 26 сентября 2018

Так вот мой собственный ответ.Этот пост был полезен: 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 это подтвердить.

...