1 /*!
2  * \brief Manager for AccessRights
3  *
4  * \copyright Copyright (c) 2020-2021 Governikus GmbH & Co. KG, Germany
5  */
6 
7 #pragma once
8 
9 #include "asn1/CVCertificate.h"
10 #include "paos/retrieve/DidAuthenticateEac1.h"
11 
12 #include <QDebug>
13 #include <QObject>
14 #include <QPointer>
15 #include <QSharedPointer>
16 
17 class test_ChatModel;
18 
19 namespace governikus
20 {
21 
22 class AccessRightManager
23 	: public QObject
24 {
25 	Q_OBJECT
26 
27 	private:
28 		friend class ::test_ChatModel;
29 
30 	public:
31 		explicit AccessRightManager(QSharedPointer<DIDAuthenticateEAC1> pDIDAuthenticateEAC1, QSharedPointer<const CVCertificate> pTerminalCvc);
32 
33 
getTerminalCvc()34 		[[nodiscard]] const QSharedPointer<const CVCertificate>& getTerminalCvc() const
35 		{
36 			return mTerminalCvc;
37 		}
38 
39 
getOptionalAccessRights()40 		[[nodiscard]] const QSet<AccessRight>& getOptionalAccessRights() const
41 		{
42 			return mOptionalAccessRights;
43 		}
44 
45 
getRequiredAccessRights()46 		[[nodiscard]] const QSet<AccessRight>& getRequiredAccessRights() const
47 		{
48 			return mRequiredAccessRights;
49 		}
50 
51 
getEffectiveAccessRights()52 		[[nodiscard]] const QSet<AccessRight>& getEffectiveAccessRights() const
53 		{
54 			return mEffectiveAccessRights;
55 		}
56 
57 
58 		void operator+=(AccessRight pAccessRight);
59 		void operator-=(AccessRight pAccessRight);
60 		void operator=(const QSet<AccessRight>& pAccessRights);
61 		operator QByteArray() const;
62 
63 	Q_SIGNALS:
64 		void fireEffectiveAccessRightsChanged();
65 
66 	private:
67 		QSharedPointer<const CVCertificate> mTerminalCvc;
68 		QSharedPointer<DIDAuthenticateEAC1> mDIDAuthenticateEAC1;
69 		QSet<AccessRight> mOptionalAccessRights;
70 		QSet<AccessRight> mEffectiveAccessRights;
71 		QSet<AccessRight> mRequiredAccessRights;
72 
73 		void removeForbiddenAccessRights(QSet<AccessRight>& pAccessRights);
74 };
75 
76 } // namespace governikus
77