SilverStripe добавить пользовательскую группу безопасности
На SS 4.0.3, следуя этому руководству и официальному документу, я успешно создал настраиваемую роль разрешений.
Теперь я хотел бы создать пользовательскую группу и добавить к ней администратора по умолчанию, как действие, выполняемое по умолчанию, чтобы сохранить эти настройки пользователя / группы / роли в случае удаления БД. Я гуглил много раз, но я не нашел никакого подробного учебника для достижения этой цели (используя Group
класс, правильное место для реализации этой логики и тд).
Может ли кто-нибудь показать мне путь?
Заранее спасибо.
2 ответа
Если вы хотите применить структуру данных, вы можете использовать DataObject::requireDefaultRecords
, Увидеть Group::requireDefaultRecords
Например, он работает на dev/build
каждый раз.
Вы должны проверить, существуют ли данные, которые вы создаете, прежде чем сделать это, чтобы убедиться, что вы не создаете группу каждый раз.
Я успешно настроил панораму, описанную по моему вопросу, благодаря @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
, Permission
строится после Member
таблица, чтобы я мог получить администратора по умолчанию без ошибок.
Отдельное спасибо этим источникам: