SilverStripe 添加自定义安全组

SilverStripe add custom security Group

this guide and the official doc 之后的 SS 4.0.3 上,我成功创建了自定义权限角色。

现在我将创建一个自定义组并将默认管理员添加到其中,作为默认执行的操作,以便在数据库被删除时维护这些 user/group/role 设置。我在谷歌上搜索了很多次,但没有找到任何详细的教程来实现这一点(使用 Group class、实现此逻辑的正确位置等等)。

谁能给我指路?

提前致谢。

如果你想强制执行一个数据结构,你可以使用 DataObject::requireDefaultRecords。有关此示例,请参见 Group::requireDefaultRecords,它每次都在 dev/build 上运行。

不过,您需要先检查您正在创建的数据是否存在,以确保您不会每次都创建组。

我成功地设置了我的问题中描述的全景图,这要归功于@robbie 和我将所有这些资源结合在一起的其他资源,以实现我的目标(我将在下面列出它们)。我想分享我对那些将来可能会遇到这种逻辑的方法。

首先,我在 PageController 中使用 providePermissions() 创建了一个全新的 standard/global 权限(参见 balbuss.com 来源)。

接下来,按照@robbie 的建议,我创建了一个 Group DataExtension 以建立一个新组并设置我之前创建的权限(参见@Barry 的解决方案来源)。

要将默认管理员添加到该组,我必须创建一个新的 Permission DataExtension,我在其中将组分配给适当的成员(请参阅@StefGuev 建议来源):

// Definizione Namespace
use SilverStripe\ORM\DataExtension;
use SilverStripe\Security\DefaultAdminService;
use SilverStripe\Security\Member;
use SilverStripe\Security\Group;

class PermessoExtension extends DataExtension
{
    /**
     * Metodo gestione inizializzazione records di default
     * Setter
     * @return void
     */
    public function requireDefaultRecords()
    {
        parent::requireDefaultRecords();

        $userAdmin = DefaultAdminService::getDefaultAdminUsername();
        $admin = Member::get()->filter('Email', $userAdmin)->first();
        $gruppo = Group::get()->filter('Code', 'negozianti')->first();

        // Controllo gruppo
        if (!$admin->inGroup($gruppo->ID)) {
            $admin->Groups()->add($gruppo);
            $admin->write();
        }
    }
}

我做出这个选择是因为在 dev/buildPermission 正在构建 Member table 之后,所以我可以得到默认管理员没有错误。

特别感谢这些来源:

balbuss.com

Bereusei's solution

StefGuev suggestion