Silverstripe子网站模块,如何创建子网站特定的成员?

Silverstripe子网站模块,如何创建子网站特定的成员?,silverstripe,Silverstripe,我想给silverstripe CMS贴上白色标签,即一个代码库服务于不同的域,每个域都有自己的成员,等等。我问了这个问题。有人建议我使用子网站模块 然而,这部分解决了我的问题,我对SilverStripe非常陌生,官方社区并不活跃 通过在ModelAdmin中使用以下代码,我能够使我的自定义模块子站点特定 和在_config.yml中 更新2 我的MemberAuthenticator类注入器 但这不起作用喷油器根本不起作用 是否可以扩展子网站模块,以便我们可以拥有子网站特定的成员 对 我们可

我想给silverstripe CMS贴上白色标签,即一个代码库服务于不同的域,每个域都有自己的成员,等等。我问了这个问题。有人建议我使用子网站模块

然而,这部分解决了我的问题,我对SilverStripe非常陌生,官方社区并不活跃

通过在ModelAdmin中使用以下代码,我能够使我的自定义模块子站点特定

和在_config.yml中

更新2

我的MemberAuthenticator类注入器

但这不起作用喷油器根本不起作用

是否可以扩展子网站模块,以便我们可以拥有子网站特定的成员

我们可以不修改核心文件吗? 如何覆盖安全模块,以便我可以列出/筛选子网站特定的成员? 如何防止一个子网站的成员登录到另一个子网站

您可能最感兴趣的两个类是SecurityAdmin和MemberAuthenticator

所有silverstripe核心文件都可以通过某种方式进行修改。。。在本视频演示中讨论的方法中,我推荐方法3,将代码分叉并将此自定义安全性添加到您的silverstripe版本中

对于SecurityAdmin,最好的选择是从菜单中删除当前SecurityAdmin并添加您自己的自定义类:

在_config.php中

CMSMenu::remove_menu_item('SecurityAdmin ');
如果有人在URL查询字符串中提供了成员id,如何防止编辑其他子网站的成员

您可以根据用户所属的网站确定是否允许用户编辑表单。。。无论是在权限中,还是简单地使用updateCMSFields删除所有字段,并使用验证器确保不能提交任何与您的规则不匹配的内容

public function updateCMSFields(FieldList $fields) {

  if (<not valid user to edit>) $fields = FieldList::create();
  ...
}

这是另一个关于和的问题。

这方面还有另一个技巧,对我来说完美无瑕

/mysite/extensions/CustomLeftAndMain.php

并在/mysite/_config.php中添加一个扩展

LeftAndMain::添加_扩展名“CustomLeftAndMain”

以上代码主要做的是,无论用户属于哪个子网站,系统都允许用户登录。只要应用程序启动,我们将检查登录的用户是否属于当前网站。handleUser会这样做。。
如果用户不属于当前站点,则他们将注销,然后重定向到登录页面。

顺便说一句,WatsMyName我已经回答了,但我很想放弃投票,因为您再次在一个地方问了多个问题。回答较小的重点问题要容易得多。我很好,因为我之前在你的帖子中有问题被否决并关闭。谢谢,但我没有找到一个安全管理员工作的方法。查看我的更新我在SilverStripe非常新如果你是非常新的,请确保你已经完成了所有课程。。。关于SecurityAdmin,请注意,我建议删除现有的一个,然后将其子类化,然后它将只显示该子类。我会更新答案使其更清晰。谢谢,将等待编辑。我已经上过这些视频课,但并不全面。好初学者,但我必须修改现有的项目,在有限的时间内。你在等待什么编辑?我在留言几秒钟后更新了答案
Injector:
  SecurityAdmin:
    class: CustomSecurityAdmin
<?php

class CustomMemberAuthenticator extends MemberAuthenticator {

    public static function authenticate($RAW_data, Form $form = null) {
        //add logic before
        //get Subsite ID
        $Subsite = SubsiteDomain::get()->filter('Domain', $_SERVER["HTTP_HOST"])->First();
        if($Subsite){
           $SubsiteID = $Subsite->SubsiteID;
        }else{
           $SubsiteID = 0;
        }

        $email = Convert::raw2sql($RAW_data['Email']);

        $member = Member::get()->filter(array(
                                    "Email" => $email,
                                    "SubsiteID" => $SubsiteID
                                ))->First();

        if(!$member){
            if($form) $form->sessionMessage("Invalid User", 'bad');
        }else{
            parent::authenticate($RAW_data,$form);
        }
    }
}
?>
Injector:
  MemberAuthenticator:
    class: CustomMemberAuthenticator
CMSMenu::remove_menu_item('SecurityAdmin ');
public function updateCMSFields(FieldList $fields) {

  if (<not valid user to edit>) $fields = FieldList::create();
  ...
}
<?php
class CustomLeftAndMain extends Extension {

    public function onAfterInit() {

        self::handleUser();

    }



    public static function handleUser(){
        $currentSubsiteID = Subsite::currentSubsiteID();

        $member =  Member::currentUser();
        $memberBelongsToSubsite =  $member->SubsiteID; 

        if($memberBelongsToSubsite>0 && $currentSubsiteID!=$memberBelongsToSubsite){
            Security::logout(false);
            Controller::curr()->redirect("/Security/login/?_c=1001");
        }
    }


}