Silverstripe子网站模块,如何创建子网站特定的成员?
我想给silverstripe CMS贴上白色标签,即一个代码库服务于不同的域,每个域都有自己的成员,等等。我问了这个问题。有人建议我使用子网站模块 然而,这部分解决了我的问题,我对SilverStripe非常陌生,官方社区并不活跃 通过在ModelAdmin中使用以下代码,我能够使我的自定义模块子站点特定 和在_config.yml中 更新2 我的MemberAuthenticator类注入器 但这不起作用喷油器根本不起作用 是否可以扩展子网站模块,以便我们可以拥有子网站特定的成员 对 我们可以不修改核心文件吗? 如何覆盖安全模块,以便我可以列出/筛选子网站特定的成员? 如何防止一个子网站的成员登录到另一个子网站 您可能最感兴趣的两个类是SecurityAdmin和MemberAuthenticator 所有silverstripe核心文件都可以通过某种方式进行修改。。。在本视频演示中讨论的方法中,我推荐方法3,将代码分叉并将此自定义安全性添加到您的silverstripe版本中 对于SecurityAdmin,最好的选择是从菜单中删除当前SecurityAdmin并添加您自己的自定义类: 在_config.php中Silverstripe子网站模块,如何创建子网站特定的成员?,silverstripe,Silverstripe,我想给silverstripe CMS贴上白色标签,即一个代码库服务于不同的域,每个域都有自己的成员,等等。我问了这个问题。有人建议我使用子网站模块 然而,这部分解决了我的问题,我对SilverStripe非常陌生,官方社区并不活跃 通过在ModelAdmin中使用以下代码,我能够使我的自定义模块子站点特定 和在_config.yml中 更新2 我的MemberAuthenticator类注入器 但这不起作用喷油器根本不起作用 是否可以扩展子网站模块,以便我们可以拥有子网站特定的成员 对 我们可
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");
}
}
}