代码之家  ›  专栏  ›  技术社区  ›  Luca Cattide

SilverStripe添加自定义安全组

  •  0
  • Luca Cattide  · 技术社区  · 6 年前

    关于SS 4.0.3,如下所示 this guide 以及 official doc ,我成功创建了自定义权限角色。

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

    谁能给我指一下路吗?

    提前谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   scrowler    6 年前

    如果要强制执行数据结构,可以使用 DataObject::requireDefaultRecords 看见 Group::requireDefaultRecords 例如,它运行在 dev/build 每一次。

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

        2
  •  0
  •   Luca Cattide    6 年前

    为了实现我的目标,多亏了@robbie和其他资料来源,我成功地建立了我的问题所描述的全景图(我将在下面列出它们)。我想与大家分享我对未来可能面临这种逻辑的人的看法。

    首先,我创建了一个全新的标准/全球许可 providePermissions() PageController (见balbuss.com来源)。

    接下来,正如@robbie所建议的,我创建了一个 Group DataExtension 为了建立一个新的组并设置我之前创建的权限(请参阅@Barry’s solution source)。

    要将默认管理员添加到此组,我必须创建一个新的 Permission 数据扩展名 其中,我将小组分配给了适当的成员(请参见@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 ,则, 准许 正在建造中 之后 Member 表,这样我就可以无误地获得默认管理员。

    特别感谢这些来源:

    balbuss.com

    Bereusei's solution

    Barry's solution

    StefGuev suggestion