SilverStripe добавить пользовательскую группу безопасности

На SS 4.0.3, следуя этому руководству и официальному документу, я успешно создал настраиваемую роль разрешений.

Теперь я хотел бы создать пользовательскую группу и добавить к ней администратора по умолчанию, как действие, выполняемое по умолчанию, чтобы сохранить эти настройки пользователя / группы / роли в случае удаления БД. Я гуглил много раз, но я не нашел никакого подробного учебника для достижения этой цели (используя Group класс, правильное место для реализации этой логики и тд).

Может ли кто-нибудь показать мне путь?

Заранее спасибо.

2 ответа

Решение

Если вы хотите применить структуру данных, вы можете использовать DataObject::requireDefaultRecords, Увидеть Group::requireDefaultRecords Например, он работает на dev/build каждый раз.

Вы должны проверить, существуют ли данные, которые вы создаете, прежде чем сделать это, чтобы убедиться, что вы не создаете группу каждый раз.

Я успешно настроил панораму, описанную по моему вопросу, благодаря @robbie и другим источникам, которые я объединил все в одном, для достижения своей цели (я перечислю их здесь ниже). Я хочу поделиться своим подходом к тем, кто может столкнуться с этой логикой в ​​будущем.

Во-первых, я создал новый стандарт / глобальное разрешение с providePermissions() в PageController (см. источник balbuss.com).

Затем, как предложил @robbie, я создал GroupDataExtension чтобы создать новую группу и установить для нее ранее созданные разрешения (см. источник решения @Barry).

Чтобы добавить администратора по умолчанию в эту группу, мне пришлось создать новый PermissionDataExtension в которой я назначил группу нужному члену (см. источник предложений @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 таблица, чтобы я мог получить администратора по умолчанию без ошибок.

Отдельное спасибо этим источникам:

balbuss.com

Решение Березея

Решение Барри

StefGuev предложение

Другие вопросы по тегам