、私はこの質問Hereを求めているなど、すなわち1つのコードベースは、異なるドメインを提供しており、各ドメインは、独自の会員を持っています。私はSubsiteモジュールを使うことを提案しました。Silverstripeサブサイトモジュール、サブサイト固有のメンバーを作る方法?私はホワイトレーベルsilverstripe CMSに望んでいた
は、しかし、これは、部分的に(私はSilverStripeに非常に新しいMと公式コミュニティは、そのアクティブではありません)私の問題を解決しました。
私は予想通り、私のModelAdmin
<?php
class CompaniesAdmin extends ModelAdmin {
private static $url_segment = 'Companies';
private static $managed_models = "Company";
private static $menu_title = 'Companies';
private static $menu_icon = 'mysite/images/icons/company-icon.png';
public function getEditForm($id = null, $fields = null){
$form = parent::getEditForm($id, $fields);
$gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass));
if(class_exists('Subsite')){
$list = $gridField->getList()->filter(array('SubsiteID'=>Subsite::currentSubsiteID()));
$gridField->setList($list);
}
return $form;
}
}
?>
にすべてが"Security"
モジュールを除き、作品次のコードを使用して、私のカスタムモジュールサブサイトの特定を行うことができました。私の要件はサブサイト固有である必要があります。つまり、あるサブサイトのメンバーは別のサブサイトには表示されず、別のサブサイトにはログインできません。
他のユーザーがthis postにアクセスしました。しかし、提案された解決策は私のシナリオでは実装できません。
私の質問
- それは我々がサブサイト 特定のメンバーを持つことができるように、サブサイトのモジュールを拡張することが可能です?
- コアファイルを変更せずに行うことはできますか?
- 私は/編集メンバーを加えながら
SubsiteID
のための隠しフィールドを追加することができたと特定SubsiteID
でメンバーを保存することができました。私は/フィルタサブサイトの特定のメンバーを一覧表示することができるように、セキュリティモジュールを無効にする方法- ?誰かがURLのクエリ文字列にメンバーIDを提供する場合、他のサブサイトのメンバーの編集を防止するための方法
- ?別のサブサイトに1回のサブサイトのログインのメンバーを防ぐために、どのよう
- ?
すべてのヘルプは高く評価されています。
UPDATE
私はinjector
を以下試みたが、うまくいきませんでした、エラーFatal error: Call to a member function getList() on a non-object in...
<?php
class CustomSecurityAdmin extends SecurityAdmin {
public function getEditForm($id = null, $fields = null){
$form = parent::getEditForm($id, $fields);
$gridField = $form->Fields()->fieldByName('Member');
if(class_exists('Subsite')){
$list = $gridField->getList()->filter(array('SubsiteID'=>Subsite::currentSubsiteID()));
$gridField->setList($list);
}
return $form;
}
}
?>
そして_config.yml
Injector:
SecurityAdmin:
class: CustomSecurityAdmin
でUPDATE 2
を得ましたMemberAuthenticator
クラス
<?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);
}
}
}
?>
そして_config.yml
Injector:
MemberAuthenticator:
class: CustomMemberAuthenticator
のための私のインジェクタしかし、これは、インジェクタはすべて
btw WatsMyName私は答えましたが、もう一度複数の質問を1か所で聞いたので、ダウンボートするように誘惑されました。より小さな問題に答えるのはずっと簡単です。私は以前にあなたの質問にdownvotedとあなたの記事に存在する問題のために閉じていたように私はいいです。 – Barry
ありがとうございましたが、私はSecurityAdminの作業インジェクタを取得しませんでした。私の更新を見てください(私はSilverstripeで非常に新しいです) – WatsMyName
あなたが非常に新しい場合は、すべてのレッスンを完了してください... http://www.silverstripe.org/learn/lessons/そして 'SecurityAdmin'に関して私は既存のものを削除してからサブクラス化することをお勧めします。私はそれをはるかに明確にするために答えを更新します。 – Barry