diff Plugin/CachedAuthorizationService.h @ 71:30fb3ce960d9

configurable user permissions
author Alain Mazy <am@osimis.io>
date Wed, 22 Feb 2023 13:13:38 +0100
parents af44dce56328
children e381ba725669
line wrap: on
line diff
--- a/Plugin/CachedAuthorizationService.h	Tue Feb 21 09:23:47 2023 +0100
+++ b/Plugin/CachedAuthorizationService.h	Wed Feb 22 13:13:38 2023 +0100
@@ -18,7 +18,7 @@
 
 #pragma once
 
-#include "IAuthorizationService.h"
+#include "BaseAuthorizationService.h"
 #include "ICacheFactory.h"
 
 #include <Compatibility.h>  // For std::unique_ptr<>
@@ -30,33 +30,41 @@
   /**
    * Decorator design pattern to add a cache around an IAuthorizationService
    **/
-  class CachedAuthorizationService : public IAuthorizationService
+  class CachedAuthorizationService : public BaseAuthorizationService
   {
   private:
-    std::unique_ptr<IAuthorizationService>  decorated_;
+    std::unique_ptr<BaseAuthorizationService>  decorated_;
     std::unique_ptr<ICache>   cache_;
 
     std::string ComputeKey(OrthancPluginHttpMethod method,
                            const AccessedResource& access,
                            const Token& token,
                            const std::string& tokenValue) const;
+
+    std::string ComputeKey(const std::string& permission,
+                           const Token& token,
+                           const std::string& tokenValue) const;
+
+    virtual bool IsGrantedInternal(unsigned int& validity,
+                                   OrthancPluginHttpMethod method,
+                                   const AccessedResource& access,
+                                   const Token* token,
+                                   const std::string& tokenValue) ORTHANC_OVERRIDE;
     
+    virtual bool GetUserProfileInternal(unsigned int& validity,
+                                        Json::Value& profile /* out */,
+                                        const Token* token,
+                                        const std::string& tokenValue) ORTHANC_OVERRIDE;
+
+    virtual bool HasUserPermissionInternal(unsigned int& validity,
+                                           const std::string& permission,
+                                           const Token* token,
+                                           const std::string& tokenValue) ORTHANC_OVERRIDE;
+
+
   public:
-    CachedAuthorizationService(IAuthorizationService* decorated /* takes ownership */,
+    CachedAuthorizationService(BaseAuthorizationService* decorated /* takes ownership */,
                                ICacheFactory& factory);
 
-    virtual bool IsGranted(unsigned int& validity,
-                           OrthancPluginHttpMethod method,
-                           const AccessedResource& access,
-                           const Token& token,
-                           const std::string& tokenValue) ORTHANC_OVERRIDE;
-    
-    virtual bool IsGranted(unsigned int& validity,
-                           OrthancPluginHttpMethod method,
-                           const AccessedResource& access) ORTHANC_OVERRIDE;
- 
-    virtual bool GetUserProfile(Json::Value& profile /* out */,
-                                const Token& token,
-                                const std::string& tokenValue);
  };
 }