Heim >Backend-Entwicklung >C++ >Können schlüsselorientierte Zugriffsschutzmuster wiederverwendbarer gestaltet werden?

Können schlüsselorientierte Zugriffsschutzmuster wiederverwendbarer gestaltet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 08:43:09777Durchsuche

Can Key-Oriented Access Protection Patterns Be Made More Reusable?

Können wir die Wiederverwendbarkeit des schlüsselorientierten Zugriffsschutzmusters verbessern?

In seiner aktuellen Form zeigt das Zugriffsschutzmuster unter Verwendung von Schlüsseln Einschränkungen in der Wiederverwendbarkeit. Um dieses Problem zu beheben, wurden verschiedene Verbesserungen vorgeschlagen.

C 03-Verbesserungen:

Mithilfe von Makros können wir das Muster vereinfachen und verallgemeinern. Die PASSKEY-Makros definieren Passkeys für bestimmte Klassen oder Funktionen und bieten so einen zentralen Ort für die Verwaltung der Zugriffskontrolle. Hier ist ein Beispiel:

#define PASSKEY_1(pKeyname, pFriend1)                             \
        class EXPAND(pKeyname)                                    \
        {                                                         \
        private:                                                  \
            friend EXPAND(pFriend1);                              \
            EXPAND(pKeyname)() {}                                 \
                                                                  \
            EXPAND(pKeyname)(const EXPAND(pKeyname)&);            \
            EXPAND(pKeyname)& operator=(const EXPAND(pKeyname)&); \
        }

Obwohl diese Methode die Benutzerfreundlichkeit des Musters verbessert, hat sie Nachteile. Es erfordert, dass Anrufer den spezifischen erforderlichen Passkey kennen, und kann zu Makro-Unordnung führen.

C 0x-Verbesserungen:

In C 0x kann das Muster dank C 0x sein größtes Potenzial entfalten zu verschiedenen Vorlagen und Vorlagenparameterfreunden. Hier ist eine Implementierung:

template <typename T>
class passkey
{
private:
    friend T; // Now possible in C++0x
    passkey() {}

    // Noncopyable
    passkey(const passkey&amp;) = delete;
    passkey&amp; operator=(const passkey&amp;) = delete;
};

#define PASSKEY_FUNCTION(pTag, pFunc, ...)               \
        struct EXPAND(pTag);                             \
                                                         \
        template <>                                      \
        class passkey<EXPAND(pTag)>                      \
        {                                                \
        private:                                         \
            friend pFunc __VA_ARGS__;                    \
            passkey() {}                                 \
                                                         \
            passkey(const passkey&amp;) = delete;            \
            passkey&amp; operator=(const passkey&amp;) = delete; \
        }

Jetzt hat jede Klasse ihren eindeutigen Passkey und Funktionen können ihre erlaubten Passkeys angeben. Aufrufer erstellen einfach den erforderlichen Passkey und rufen die gewünschte Methode auf. Dieser Ansatz bietet durch seine generische Implementierung eine erhöhte Wiederverwendbarkeit und Flexibilität.

Das obige ist der detaillierte Inhalt vonKönnen schlüsselorientierte Zugriffsschutzmuster wiederverwendbarer gestaltet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn