#include <iostream>
#include <map>
#include <typeinfo>
struct Access {
static std::map<int, int> bits;
enum class Group1 : short {
Right1 = 1 << 0,
Right2 = 1 << 1,
Key = 1
};
enum class Group2: short {
Right1 = 1 << 0,
Right2 = 1 << 1,
Key = 2
};
template<typename T>
bool operator()(T bit)
{
std::cout << "T: " << typeid(T).name() << std::endl;
return ((Access::bits.find(static_cast<int>(T::Key)) != Access::bits.end()) && (Access::bits[static_cast<int>(T::Key)] & bit) == bit);
}
//bool operator()(Access::Group1 bit);
//bool operator()(Access::Group2 bit);
Access operator=(std::map<int, int> rights)
{
Access::bits = rights;
return *this;
}
} Access;
std::map<int, int> Access::bits;
// Bitvergleich Template
template<typename T>
T operator &(int lhs, T rhs)
{
return static_cast<T>(lhs & static_cast<int>(rhs));
}
/*
bool Access::operator()(Access::Group1 bit)
{
return ((Access::bits.find(static_cast<int>(Access::Group1::Key)) != Access::bits.end()) && (Access::bits[static_cast<int>(Access::Group1::Key)] & bit) == bit);
}
bool Access::operator()(Access::Group2 bit)
{
return ((Access::bits.find(static_cast<int>(Access::Group2::Key)) != Access::bits.end()) && (Access::bits[static_cast<int>(Access::Group2::Key)] & bit) == bit);
}
*/
int main(int argc, char *argv[]) {
// Diese Daten kommen aus der JSON Datei/Anfrage
std::map<int, int> json = {
{1, 7}
};
Access = json;
if (Access(Access::Group1::Right1))
{
std::cout << "Access Group1::Right1 granted!" << std::endl;
}
if (Access(Access::Group1::Right2))
{
std::cout << "Access Group1::Right2 granted!" << std::endl;
}
if (Access(Access::Group2::Right1))
{
std::cout << "Access Group2::Right1 granted!" << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dHlwZWluZm8+CgpzdHJ1Y3QgQWNjZXNzIHsKICAgCiAgICBzdGF0aWMgc3RkOjptYXA8aW50LCBpbnQ+IGJpdHM7CiAKICAgIGVudW0gY2xhc3MgR3JvdXAxIDogc2hvcnQgewogICAgICAgIFJpZ2h0MSAgPSAxIDw8IDAsCiAgICAgICAgUmlnaHQyICA9IDEgPDwgMSwKICAgICAgICBLZXkgPSAxCiAgICB9OwogICAKIAogICAgZW51bSBjbGFzcyBHcm91cDI6IHNob3J0IHsKICAgICAgICBSaWdodDEgID0gMSA8PCAwLAogICAgICAgIFJpZ2h0MiAgPSAxIDw8IDEsCiAgICAgICAgS2V5ID0gMgogICAgfTsKIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIGJvb2wgb3BlcmF0b3IoKShUIGJpdCkKICAgIHsKICAgIAlzdGQ6OmNvdXQgPDwgIlQ6ICIgPDwgdHlwZWlkKFQpLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuICgoQWNjZXNzOjpiaXRzLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihUOjpLZXkpKSAhPSBBY2Nlc3M6OmJpdHMuZW5kKCkpICYmIChBY2Nlc3M6OmJpdHNbc3RhdGljX2Nhc3Q8aW50PihUOjpLZXkpXSAmIGJpdCkgPT0gYml0KTsKICAgIH0KCiAgICAvL2Jvb2wgb3BlcmF0b3IoKShBY2Nlc3M6Okdyb3VwMSBiaXQpOwogICAgLy9ib29sIG9wZXJhdG9yKCkoQWNjZXNzOjpHcm91cDIgYml0KTsKIAogICAgQWNjZXNzIG9wZXJhdG9yPShzdGQ6Om1hcDxpbnQsIGludD4gcmlnaHRzKQogICAgewogICAgICAgIEFjY2Vzczo6Yml0cyA9IHJpZ2h0czsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn0gQWNjZXNzOwogCnN0ZDo6bWFwPGludCwgaW50PiBBY2Nlc3M6OmJpdHM7CiAKLy8gQml0dmVyZ2xlaWNoIFRlbXBsYXRlCnRlbXBsYXRlPHR5cGVuYW1lIFQ+ClQgb3BlcmF0b3IgJihpbnQgbGhzLCAgVCByaHMpCnsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihsaHMgJiBzdGF0aWNfY2FzdDxpbnQ+KHJocykpOwp9CgovKgpib29sIEFjY2Vzczo6b3BlcmF0b3IoKShBY2Nlc3M6Okdyb3VwMSBiaXQpCnsKICAgIHJldHVybiAoKEFjY2Vzczo6Yml0cy5maW5kKHN0YXRpY19jYXN0PGludD4oQWNjZXNzOjpHcm91cDE6OktleSkpICE9IEFjY2Vzczo6Yml0cy5lbmQoKSkgJiYgKEFjY2Vzczo6Yml0c1tzdGF0aWNfY2FzdDxpbnQ+KEFjY2Vzczo6R3JvdXAxOjpLZXkpXSAmIGJpdCkgPT0gYml0KTsKfQogCmJvb2wgQWNjZXNzOjpvcGVyYXRvcigpKEFjY2Vzczo6R3JvdXAyIGJpdCkKewogICAgcmV0dXJuICgoQWNjZXNzOjpiaXRzLmZpbmQoc3RhdGljX2Nhc3Q8aW50PihBY2Nlc3M6Okdyb3VwMjo6S2V5KSkgIT0gQWNjZXNzOjpiaXRzLmVuZCgpKSAmJiAoQWNjZXNzOjpiaXRzW3N0YXRpY19jYXN0PGludD4oQWNjZXNzOjpHcm91cDI6OktleSldICYgYml0KSA9PSBiaXQpOwp9CiovCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgIAogICAgLy8gRGllc2UgRGF0ZW4ga29tbWVuIGF1cyBkZXIgSlNPTiBEYXRlaS9BbmZyYWdlCiAgICBzdGQ6Om1hcDxpbnQsIGludD4ganNvbiA9IHsKICAgICAgICB7MSwgN30KICAgIH07CiAgIAogICAgQWNjZXNzID0ganNvbjsKIAogICAgaWYgKEFjY2VzcyhBY2Nlc3M6Okdyb3VwMTo6UmlnaHQxKSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkFjY2VzcyBHcm91cDE6OlJpZ2h0MSBncmFudGVkISIgPDwgc3RkOjplbmRsOwogICAgfQogCiAgICBpZiAoQWNjZXNzKEFjY2Vzczo6R3JvdXAxOjpSaWdodDIpKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQWNjZXNzIEdyb3VwMTo6UmlnaHQyIGdyYW50ZWQhIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAKICAgCiAgICBpZiAoQWNjZXNzKEFjY2Vzczo6R3JvdXAyOjpSaWdodDEpKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQWNjZXNzIEdyb3VwMjo6UmlnaHQxIGdyYW50ZWQhIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAKICAgIHJldHVybiAwOwp9