【问题标题】:Simple form for Model Admin in SilverstripeSilverstripe 中的模型管理员的简单表单
【发布时间】:2016-07-25 14:46:04
【问题描述】:

默认使用Model Admin来管理一个model/s,如果跳过这个model会报错。

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

我想先显示一个简单的表单(密码和操作按钮的文本字段),然后如果密码正确,它应该转到网格字段。

我尝试更改模型内的 getCMSfields,但只有当我单击网格字段中的一条记录时,该字段才可见:

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

编辑:

此二级密码是解密该 DataObject 数据的密钥,不是常规登录,因此它是保护某些敏感数据安全的一种附加安全方法。

【问题讨论】:

  • 我建议不要在 CMS 中使用登录表单。我建议使用 SilverStripe 身份验证和权限功能来控制用户是否可以查看此部分。是否有理由在 CMS 中使用额外的登录表单而不是 SilverStripe 的安全功能?
  • 绝对!如果用户有权查看或编辑特定的 DataObject,他为什么要重新登录?您可以覆盖模型中的 can* 方法,如 canCreate()、canView()、canEdit() 和 canDelete(),并使用 PermissionProvider 向成员组添加全局权限。见docs.silverstripe.org/en/3.3/developer_guides/model/permissionsdocs.silverstripe.org/en/3.3/developer_guides/security/…
  • 我完全同意上述观点 - 权限应该决定用户可以看到或看不到的内容 - 我不会在已经有登录名的系统中创建登录名
  • 恐怕我理解错了。来自此数据对象的数据存储在第二个数据库中,该数据库已加密,并且此密码/密钥与存储在服务器某处的加密密钥进行比较。所以这不是登录。只是为了保护敏感数据的安全而增加的一种安全方法。
  • 我仍然看不出在 CMS 中使用额外密码表单的原因。为什么不在 CMS 中设置权限,允许某些用户访问数据,而不是其他用户?让用户输入第二个密码屏幕是一种糟糕的用户体验,它不会使系统更加安全。

标签: php silverstripe


【解决方案1】:

我想通了,对于那些处于类似情况的人。我们可以使用 LeftAndMain,而不是使用 ModelAdmin。所以代码将是:

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';
    }
}

另一个需要是,在验证之后,在嵌套步骤中显示带有模型记录的常规网格字段,但是当我成功时,我也会返回一个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多