code to unpack permissions into a usable data structure

This commit is contained in:
Seth Alves 2016-06-01 15:33:24 -07:00
parent f082201941
commit ae0c8a96f2
3 changed files with 87 additions and 0 deletions

View file

@ -0,0 +1,40 @@
//
// AgentPermissions.h
// domain-server/src
//
// Created by Seth Alves on 2016-6-1.
// Copyright 2016 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_AgentPermissions_h
#define hifi_AgentPermissions_h
class AgentPermissions {
public:
AgentPermissions(QMap<QString, QVariant> perms) {
_id = perms["permissions_id"].toString();
canConnectToDomain = perms["id_can_connect"].toBool();
canAdjustLocks = perms["id_can_adjust_locks"].toBool();
canRezPermanentEntities = perms["id_can_rez"].toBool();
canRezTemporaryEntities = perms["id_can_rez_tmp"].toBool();
canWriteToAssetServer = perms["id_can_write_to_asset_server"].toBool();
};
QString getID() { return _id; }
bool canConnectToDomain { false };
bool canAdjustLocks { false };
bool canRezPermanentEntities { false };
bool canRezTemporaryEntities { false };
bool canWriteToAssetServer { false };
protected:
QString _id;
};
using AgentPermissionsPointer = std::shared_ptr<AgentPermissions>;
#endif // hifi_AgentPermissions_h

View file

@ -26,6 +26,9 @@
#include "DomainServerSettingsManager.h"
#define WANT_DEBUG 1
const QString SETTINGS_DESCRIPTION_RELATIVE_PATH = "/resources/describe-settings.json";
const QString DESCRIPTION_SETTINGS_KEY = "settings";
@ -190,12 +193,49 @@ void DomainServerSettingsManager::setupConfigMap(const QStringList& argumentList
_configMap.loadMasterAndUserConfig(argumentList);
}
}
if (oldVersion < 1.3) {
// This was prior to the permissions-grid in the domain-server settings page
}
}
unpackPermissions();
// write the current description version to our settings
appSettings.setValue(JSON_SETTINGS_VERSION_KEY, _descriptionVersion);
}
void DomainServerSettingsManager::unpackPermissions() {
QList<QVariant> permsHashList = valueOrDefaultValueForKeyPath(AGENT_PERMISSIONS_KEYPATH).toList();
foreach (QVariant permsHash, permsHashList) {
AgentPermissionsPointer perms { new AgentPermissions(permsHash.toMap()) };
_agentPermissions[perms->getID()] = perms;
}
#ifdef WANT_DEBUG
qDebug() << "--------------- permissions ---------------------";
QHashIterator<QString, AgentPermissionsPointer> i(_agentPermissions);
while (i.hasNext()) {
i.next();
AgentPermissionsPointer perms = i.value();
qDebug() << i.key()
<< perms->canConnectToDomain
<< perms->canAdjustLocks
<< perms->canRezPermanentEntities
<< perms->canRezTemporaryEntities
<< perms->canWriteToAssetServer;
}
#endif
}
AgentPermissionsPointer DomainServerSettingsManager::getPermissionsForName(QString name) const {
if (_agentPermissions.contains(name)) {
return _agentPermissions[name];
}
return nullptr;
}
QVariant DomainServerSettingsManager::valueOrDefaultValueForKeyPath(const QString& keyPath) {
const QVariant* foundValue = valueForKeyPath(_configMap.getMergedConfig(), keyPath);

View file

@ -19,6 +19,7 @@
#include <HTTPManager.h>
#include <ReceivedMessage.h>
#include "AgentPermissions.h"
const QString SETTINGS_PATHS_KEY = "paths";
@ -27,6 +28,7 @@ const QString SETTINGS_PATH_JSON = SETTINGS_PATH + ".json";
const QString ALLOWED_USERS_SETTINGS_KEYPATH = "security.allowed_users";
const QString RESTRICTED_ACCESS_SETTINGS_KEYPATH = "security.restricted_access";
const QString AGENT_PERMISSIONS_KEYPATH = "security.permissions";
class DomainServerSettingsManager : public QObject {
Q_OBJECT
@ -41,6 +43,8 @@ public:
QVariantMap& getUserSettingsMap() { return _configMap.getUserConfig(); }
QVariantMap& getSettingsMap() { return _configMap.getMergedConfig(); }
AgentPermissionsPointer getPermissionsForName(QString name) const;
private slots:
void processSettingsRequestPacket(QSharedPointer<ReceivedMessage> message);
@ -58,6 +62,9 @@ private:
HifiConfigVariantMap _configMap;
friend class DomainServer;
void unpackPermissions();
QHash<QString, AgentPermissionsPointer> _agentPermissions;
};
#endif // hifi_DomainServerSettingsManager_h