You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.2 KiB
C++

#include "rolesform.h"
#include "ui_rolesform.h"
#include "../iplugin.h"
#include "../permissionservice.h"
#include <QTreeWidgetItem>
RolesForm::RolesForm(QWidget *parent) :
AutoForm<Role>(parent),
ui(new Ui::RolesForm)
{
ui->setupUi(this);
registerBinding(ui->active);
registerBinding(ui->name);
}
RolesForm::~RolesForm()
{
delete ui;
}
void RolesForm::bindOtherToUi()
{
ui->treePerms->clear();
QList<QSharedPointer<Permission> > perms = entity()->listPermissions();
foreach (IPlugin *plugin, Context::instance().plugins()) {
if (plugin->pluginId() != "CORE")
{
QTreeWidgetItem *item = new QTreeWidgetItem();
item->setText(0, plugin->pluginName());
item->setData(0, Qt::UserRole, plugin->pluginId());
foreach (QString perm, Context::instance().defaultPerms()) {
QTreeWidgetItem *permItem = new QTreeWidgetItem();
permItem->setText(0, tr(perm.toStdString().c_str()));
permItem->setData(0, Qt::UserRole, perm);
QList<QSharedPointer<Permission> >::iterator it = std::find_if(ALL(perms), [&perm, plugin](QSharedPointer<Permission> p){ return p->permissionName() == perm
&& p->pluginId() == plugin->pluginId(); });
permItem->setCheckState(0, it != perms.end() ? Qt::Checked : Qt::Unchecked);
item->addChild(permItem);
}
ui->treePerms->addTopLevelItem(item);
}
}
}
bool RolesForm::bindOtherToData()
{
PermissionService permService;
entity()->clearPermissions();
for (int i = 0; i < ui->treePerms->topLevelItemCount(); i++)
{
QTreeWidgetItem *item = ui->treePerms->topLevelItem(i);
for (int j = 0; j < item->childCount(); j++)
{
QTreeWidgetItem *permItem = item->child(j);
if (permItem->checkState(0) == Qt::Checked)
{
QSharedPointer<Permission> perm = permService.forNameAndPlugin(permItem->data(0, Qt::UserRole).toString(), item->data(0, Qt::UserRole).toString());
perm->addRole(entity());
entity()->addPermission(perm);
}
}
}
return true;
}