Implementation of basic permission checks.
							parent
							
								
									2c49209b8e
								
							
						
					
					
						commit
						96685d2bed
					
				@ -0,0 +1,43 @@
 | 
			
		||||
#include "permissionevaluator.h"
 | 
			
		||||
 | 
			
		||||
#include <QSharedPointer>
 | 
			
		||||
 | 
			
		||||
#include "data/core-data.h"
 | 
			
		||||
#include "context.h"
 | 
			
		||||
 | 
			
		||||
PermissionEvaluator::PermissionEvaluator(QObject *parent)
 | 
			
		||||
    :QObject(parent)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PermissionEvaluator::~PermissionEvaluator()
 | 
			
		||||
{   
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool PermissionEvaluator::hasPermission(const QString &pluginId, const QString &permission)
 | 
			
		||||
{
 | 
			
		||||
    if (Context::instance().currentUser()->isAdmin())
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool ret;
 | 
			
		||||
    QList<QSharedPointer<Role> > roles = Context::instance().currentUser()->listRoles();
 | 
			
		||||
 | 
			
		||||
    ret = std::find_if(ALL(roles), [&pluginId, &permission](QSharedPointer<Role> role) -> bool {
 | 
			
		||||
        foreach (QSharedPointer<Permission> perm, role->listPermissions()) {
 | 
			
		||||
            if (perm->pluginId() == pluginId && perm->permissionName() == permission) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }) != roles.end();
 | 
			
		||||
 | 
			
		||||
    if (!ret)
 | 
			
		||||
    {
 | 
			
		||||
        emit permissionDenied(permission);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,23 @@
 | 
			
		||||
#ifndef PERMISSIONEVALUATOR_H
 | 
			
		||||
#define PERMISSIONEVALUATOR_H
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
#include "core_global.h"
 | 
			
		||||
 | 
			
		||||
class CORESHARED_EXPORT PermissionEvaluator : public QObject
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    explicit PermissionEvaluator(QObject *parent = NULL);
 | 
			
		||||
    ~PermissionEvaluator();
 | 
			
		||||
 | 
			
		||||
    bool hasPermission(const QString &pluginId, const QString &permission);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void permissionDenied(QString permission);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // PERMISSIONEVALUATOR_H
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue