컴파일 타임 온 전성 검사가 충족되지 않으면로드를 거부하는 모듈이 있습니다. 이런 식으로 뭔가 :역할에 의해 컴파일 시간 온 전성 체크가 제공됩니다.
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 "가 필요합니다 - 메서드가 존재하는지뿐만 아니라 그것을 실행하고 반환 값을 확인해야한다는 것을 제외하고는"authorized_user "가 필요합니다.
니스; 역할에 BUILD 메서드를 제공하는 것을 좋아합니다. 저는이 _quite_가 전체적인 문제를 해결할 것이라고 생각하지 않습니다. 왜냐하면 어떤 일이 TopSecret을 사용하지만 클래스 메서드 만 호출하면 어떻게 될지 모르는 개체 인스턴스화 때까지 온 전성 검사가 수행되지 않기 때문입니다. TopSecret-> TopSecret을 사용하는 모든 클래스에서 new하지만 어떻게 든 강제로 역할을 수행 할 수있는 방법이 있습니까? – gcbenison
무슨 뜻인지 알 겠어. 나는 그것을 제한하는 좋은 방법이 있는지 정말로 모르겠다. #moose on irc.perl.org가 더 좋은 아이디어 일 수 있습니다. –
내가 생각할 수있는 유일한 것은 당신이 ['before'] (https://metacpan.org/pod/distribution/Moose/lib/Moose/Manual/MethodModifiers.pod#Before-and-after- Modifiers) 메소드 수정자를 사용하여 사용자가 권한이 있는지 확인합니다. –