У меня есть модуль, который отказывается загружать, если не выполняется проверка соответствия времени компиляции. Что-то вроде этого:Проверка работоспособности во время компиляции, предоставляемая ролью
package TopSecret;
use Moose;
die "Only Joe can use this!" unless $ENV{USER} eq 'joe';
1;
Теперь я хотел бы применить подобную проверку вменяемости на несколько модулей, так что моя мысль поставить его в роли. Модуль-потребитель предоставит некоторую информацию для настройки проверки. Так что это может выглядеть примерно так:
package TopSecret;
use Moose;
with 'ForAuthorizedUser';
sub authorized_user { 'joe' }
1;
Проблема: как я могу осуществлять TopSecret :: authorized_user() из ForAuthorizedUser, во время компиляции? Что-то вроде «требует» authorized_user », за исключением того, что ему нужно будет проверить не только, что метод существует, но и выполнить его и проверить возвращаемое значение.
Nice; Мне нравится предоставлять метод BUILD в роли. Я не думаю, что этот _quite_ решает всю проблему, потому что проверка работоспособности не выполняется до создания экземпляра объекта, что может не произойти (что, если класс использует TopSecret, но только вызывает методы класса, например?) Может существовать соглашение о вызове TopSecret-> новый в любом классе с использованием TopSecret, но есть ли способ заставить роль каким-то образом заставить это? – gcbenison
Я понимаю, что вы имеете в виду. Я не уверен, что есть хороший способ ограничить это. #moose на irc.perl.org может быть лучше. –
Единственное, о чем я могу думать, это то, что вы предоставляете ['before'] (https://metacpan.org/pod/distribution/Moose/lib/Moose/Manual/MethodModifiers.pod#Before-and-after- Модификаторы) для каждого из ваших методов класса, который проверяет, разрешен ли пользователь. –