【问题标题】:Permissions for ModelAdmin DataObjectsModelAdmin 数据对象的权限
【发布时间】:2014-06-02 04:42:38
【问题描述】:

当用户不是管理员,但他分配的组有权访问 ModelAdmin 时,模型管理页面列在菜单中,用户可以访问它,但是索引视图中不显示任何记录。

要显示记录,需要在模型中设置权限。文档说要这样做:

http://doc.silverstripe.org/framework/en/3.1/reference/modeladmin

class Category extends DataObject {
  // ...
    public function canView($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
    public function canEdit($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
    public function canDelete($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
    public function canCreate($member = null) {
        return Permission::check('CMS_ACCESS_CMSMain', 'any', $member);
    }
}

但是这不起作用,因为 $member 为 Null。将这些方法设置为返回 true 会显示记录。这安全吗?或者这是否让任何人都能够编辑记录?以组无权访问该模型管理员的用户身份登录似乎不允许他们进入列表页面,但这似乎是错误的做法。

    public function canView($member = null) {
        return null;
    }
    public function canEdit($member = null) {
        return true;
    }
    public function canDelete($member = null) {
         return true;
    }
    public function canCreate($member = null) {
         return true;
    }

允许组查看和编辑模型管理员记录的最佳方式是什么?

【问题讨论】:

  • 感谢编辑,我不知道我可以标记语言。将来会做。 :)

标签: silverstripe


【解决方案1】:

该示例是您要遵循的示例,尽管权限名称不同。示例中的权限名称是用户是否有权访问 CMSMain,这是处理页面的 CMS 的一部分。

要获取权限的名称,您需要获取 ModelAdmin 的类名(例如,CategoryAdmin)并在其前面加上 CMS_ACCESS_(在本例中将给出 CMS_ACCESS_CategoryAdmin)。

至于$membernull,那只是默认值。所以$member 只是null 如果没有传入任何值。但这实际上并不重要,因为Permission::check 专门处理传入null 值并改用当前登录的用户。

【讨论】:

  • 好的,感谢一切都说得通并且运行良好。我在开发组上看到了关于减少样板化的讨论。不过似乎还可以。安全第一。
猜你喜欢
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
相关资源
最近更新 更多