SilverStripe添加自定义安全组

时间:2018-04-20 14:47:25

标签: php silverstripe silverstripe-4

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

现在,我将创建一个自定义组并为其添加默认管理员,作为默认情况下执行的操作,以便在删除数据库时维护这些用户/组/角色设置。我google了很多次,但我没有找到任何详细的教程来实现这一点(使用Group类,实现这个逻辑的正确位置等等。)

有人能给我指路吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

在此之前,您需要检查您创建的数据是否存在,以确保您不会每次都创建该组。

答案 1 :(得分:0)

我成功地设置了我的问题所描述的全景,感谢@robbie和其他来源,我将其合并为一体,以实现我的目标(我将在下面列出它们)。我想分享我的方法,以便将来可以面对这种逻辑。

首先,我在providePermissions()中使用PageController创建了一个全新的标准/全局权限(请参阅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/build期间,PermissionMember表之后构建了,因此我可以获得默认管理员而不会出错。

特别感谢这些来源:

balbuss.com

Bereusei's solution

Barry's solution

StefGuev suggestion