限制某些用户的字段

时间:2012-08-31 07:45:19

标签: silverstripe

使用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中不能使用它,但是将checkboxsetfield更改为下拉列表。

修改

我发现由于DOM Popup不能包含包含DOM(DataObjectManager)的页面的类名,因此我的方法不起作用。这是一个简单的继承问题,我不敢相信我之前没有看到它。请参阅下面的答案,了解我如何解决原始查询的详细信息。

1 个答案:

答案 0 :(得分:0)

最后答案很简单。我做了以下事情,我希望有人觉得这很有用。

正常创建页面上的复选框

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

带有Permission :: check(“ADMIN”)的if语句检查管理员是否已登录,如果是,则仅显示复选框。

您还需要在此方法中包含$ fieldset-> push以将其添加到cms。 ADMIN可以更改为您在安全性面板中创建的任何用户组,因此这是一种适应性强的方法。

我发现这对我来说是最好的方式,但如果有人可以改进它/提供更好的解决方案,我很乐意听到它。