2016-04-05 2 views
0

По умолчанию Model Admin используется для управления моделью/s, и если модель пропущена, результатом является ошибка.Простая форма для Model Admin в Silverstripe

/* private static $managed_models = array(
    'OneModel' 
); */ 

Я хочу, чтобы отобразить простую форму (TextField для пароля и кнопка действия), а затем, если пароль правильный, он должен идти к в gridfield.

Я попытался изменить getCMSfields внутри модели, но поле отображается только если я нажимаю на одной из записей из gridfield:

public function getCMSfields(){ 
    $fields = FieldList::create(TabSet::create('Root', $login = Tab::create('Authorise', 
     TextField::create('Password') 
    ))); 
    return $fields; 
} 

Edit:

Этот вторичный пароль это ключ для дешифрования данных для этого объекта DataObject, не является регулярным входом в систему, поэтому это дополнительный метод защиты для хранения конфиденциальных данных.

+3

Я предлагаю не иметь регистрационную форму внутри CMS. Я предлагаю использовать средства проверки подлинности Silverlight и полномочия для контроля, если пользователь может просмотреть этот раздел. Есть ли причина использовать дополнительную регистрационную форму внутри CMS, а не функций безопасности SilverStripe? – 3dgoo

+3

Абсолютно! Если у пользователя есть разрешение на просмотр или редактирование определенного объекта DataObject, зачем ему снова войти в систему? Вы можете перезаписать методы can * canCreate(), canView(), canEdit() и canDelete() в вашей модели и использовать PermissionProvider для добавления глобальных разрешений для группы участников. См. Https://docs.silverstripe.org/en/3.3/developer_guides/model/permissions/ и https://docs.silverstripe.org/en/3.3/developer_guides/security/permissions/ – wmk

+2

Я полностью согласен с вышеизложенным - разрешения должны решить, что пользователь может или не может видеть - я бы не создал логин в системе, у которой уже есть логин – Barry

ответ

1

Я понял, для тех, кто в аналогичной ситуации. Вместо использования ModelAdmin мы можем использовать LeftAndMain. так что код будет:

более
class Applications extends LeftAndMain { 
    static $url_segment = 'applications'; 
    static $menu_title = 'Applications'; 
    static $url_rule = '$Action/$ID'; 

    public function init(){ 
     parent::init(); 
    } 

    private static $allowed_actions = array(
     'login' 
    ); 

    public function getEditForm($id = null, $fields = null) { 
     $fields = new FieldList(
      TextField::create('Password', ' Password') 
     ); 
     $actions = new FieldList(new FormAction('applicationPassword')); 
     return new Form($this, "EditForm", $fields, $actions); 
    } 

    public function applicationPassword($data, Form $form){ 
     $pass = $data['Password']; 
     $form->sessionMessage('Password submited for testing : '.$pass, 'success'); 
     return $this->redirect('login'); 
    } 

    public function login(){ 
     return 'success'; 
    } 
} 

Нужно будет, после проверки на этапе гнездо, чтобы показать регулярное gridfield с модельными записями, но когда я succed, я вернусь с ответом, а также.