Ограничение полей для определенных пользователей

Использование SilverStripe 2.4.7.

Я сделал некоторые поиски, но я не могу найти ответ на этот вопрос. Я хочу включить флажок во всплывающем окне в dataobjectmanager, но не для каждого пользователя.

У меня есть две отдельные страницы, одна для одного пользователя, а другая для другого, и я хочу установить флажок только на одной. Я думал, что оператора if будет достаточно, быстро и просто, верно?

public function getCMSFields()
{
    $categories = array("Morning","Afternoon", "Evening", "Night");

    return new FieldSet(
        new TextField('Title'),
        new DatePickerField('Date', 'Date'),
        new ImageField('Photo', 'Photo'),
        new MoneyField('AdultPrice', 'Adult Price'),
        new MoneyField('ChildPrice', 'Child Price'),
        new DropdownField('Category', 'Choose a Category', $categories)
    );

Это моя попытка подхода с оператором if

        if($this->ClassName == 'Movie'){
        $films= DataObject::get('Films');

        if (!empty($films)) {

        // create an array('ID'=>'Name')
        $map = $films->toDropdownMap('ID', 'Name');

        $fieldset->push(new CheckboxSetField(
            $name = "Films",
            $title = "Select Films",
            $source = $map
            ));
        }
    }

В основном это работает, если я использую его в getCMSFields_forPopup, но не только в getCMSFields, но меняю поле checkboxset на раскрывающееся.

Изменить

Я обнаружил, что мой подход не будет работать из-за того, что всплывающее окно DOM не может иметь имя класса страницы, содержащей DOM (DataObjectManager). Это простая проблема наследования, и я не могу поверить, что не видел ее раньше. Смотрите ответ ниже, чтобы узнать, как я решил свой исходный запрос.


person MillyMonster    schedule 31.08.2012    source источник
comment
Можете ли вы дать код создания всплывающего окна?   -  person MrFox    schedule 31.08.2012
comment
Добавление кода выше. Спасибо за ваш ответ. Этот код находится в DataObject и отлично работает с DataObjectManager.   -  person MillyMonster    schedule 31.08.2012
comment
пожалуйста, всегда указывайте, какую версию silverstripe вы используете (3.0 имеет некоторые отличия от 2.4.x) - я думаю, вы используете 2.4, поскольку вы упоминаете dataobjectmanager?   -  person schellmax    schedule 31.08.2012
comment
Я обнаружил что-то странное, что я не совсем понимаю. Если я изменю свой метод с getCMSFields на getCMSFields_forPopup, он заработает. Проблема в том, что он изменяет мой checkboxsetField на раскрывающийся список. Кто-нибудь знает, почему?   -  person MillyMonster    schedule 31.08.2012


Ответы (1)


В итоге ответ оказался довольно простым. Я сделал следующее, и я надеюсь, что кто-то найдет это полезным.

Создайте флажок на странице, как обычно

if(Permission::check("ADMIN")){
        if (! empty($values)) 
        {
            $checkBox = new CheckboxSetField(                                           
                $name = "Values",
                $title = "Select Value",
                $source =  $values
            );
            $fieldset->push($checkBox);
        }
    }

Оператор if с Permission::check("ADMIN") проверяет, вошел ли администратор в систему, и показывает набор флажков только в том случае, если это так.

Вам также нужно будет включить $fieldset->push в этот метод, чтобы добавить его в cms. ADMIN можно изменить на любую из ваших групп пользователей, которые вы создали на панели безопасности, так что это адаптируемый подход.

Я нашел это лучшим способом для меня, но если кто-то может улучшить его/предложить лучшее решение, я хотел бы услышать об этом.

person MillyMonster    schedule 25.10.2012