1111use OCA \Libresign \Enum \SignatureFlow ;
1212use OCA \Libresign \Service \Policy \Contract \IPolicyDefinition ;
1313use OCA \Libresign \Service \Policy \Contract \IPolicyDefinitionProvider ;
14+ use OCA \Libresign \Service \Policy \Model \PolicyContext ;
1415use OCA \Libresign \Service \Policy \Model \PolicySpec ;
16+ use OCA \Libresign \Service \Policy \Provider \RequestSignGroups \RequestSignGroupsPolicyValue ;
17+ use OCP \AppFramework \Services \IAppConfig ;
1518
1619final class SignatureFlowPolicy implements IPolicyDefinitionProvider {
1720 public const KEY = 'signature_flow ' ;
1821 public const SYSTEM_APP_CONFIG_KEY = 'policy.signature_flow.system ' ;
1922
23+ public function __construct (
24+ private IAppConfig $ appConfig ,
25+ ) {
26+ }
27+
2028 #[\Override]
2129 public function keys (): array {
2230 return [
@@ -44,6 +52,7 @@ public function get(string|\BackedEnum $policyKey): IPolicyDefinition {
4452 },
4553 appConfigKey: self ::SYSTEM_APP_CONFIG_KEY ,
4654 resolutionMode: PolicySpec::RESOLUTION_MODE_VALUE_CHOICE ,
55+ eligibilityChecker: fn (PolicyContext $ context ): bool => $ this ->isUserInAuthorizedGroup ($ context ),
4756 ),
4857 default => throw new \InvalidArgumentException ('Unknown policy key: ' . $ this ->normalizePolicyKey ($ policyKey )),
4958 };
@@ -56,4 +65,25 @@ private function normalizePolicyKey(string|\BackedEnum $policyKey): string {
5665
5766 return $ policyKey ;
5867 }
68+
69+ private function isUserInAuthorizedGroup (PolicyContext $ context ): bool {
70+ $ authorizedGroupsJson = $ this ->appConfig ->getAppValueString (
71+ 'policy.groups_request_sign ' ,
72+ RequestSignGroupsPolicyValue::encode (RequestSignGroupsPolicyValue::DEFAULT_GROUPS ),
73+ );
74+ $ authorizedGroups = RequestSignGroupsPolicyValue::decode ($ authorizedGroupsJson );
75+
76+ $ userGroups = $ context ->getGroups ();
77+ if ($ userGroups === []) {
78+ return false ;
79+ }
80+
81+ foreach ($ userGroups as $ userGroup ) {
82+ if (in_array ($ userGroup , $ authorizedGroups , true )) {
83+ return true ;
84+ }
85+ }
86+
87+ return false ;
88+ }
5989}
0 commit comments