Работаем с группами – вставка, удаление, правка. Работа с LDAP в Qt. Часть 7
Сегодня мы рассмотрим работу с группами в каталоге LDAP – создание, удаление и правку.
Модернизация класса
В прошлой статье класс QLdapGroup уже был модернизирован, доработаем его еще немного:
Заголовок:
#ifndef QLDAPGROUP_H
#define QLDAPGROUP_H
#include <QString>
#include "qldap.h"
#include "qldapentity.h"
class QLdapGroup : public QLdapEntity
{
public:
explicit QLdapGroup(QLdapEntry *group);
QStringList getMembers() const;
QString getDN() const;
void setDescription(const QString &value) const;
QString getDescription() const;
void setName(const QString &value) const;
QString getName() const;
private:
};
QDebug operator<<(QDebug debug, const QLdapGroup &user);
QDebug operator<<(QDebug debug, const QLdapGroup *user);
#endif // QLDAPGROUP_H
Реализация:
#include "qldapgroup.h"
#include <QtDebug>
QLdapGroup::QLdapGroup(QLdapEntry *group) : QLdapEntity(group)
{
this->setEntityValue("objectClass",QStringList({"group"}));
}
QStringList QLdapGroup::getMembers() const
{
return this->getEntityValue("member").split(",");
}
QString QLdapGroup::getDN() const
{
return this->getEntityValue("distinguishedName");
}
void QLdapGroup::setDescription(const QString &value) const
{
this->setEntityValue("description",QStringList(value));
}
QString QLdapGroup::getDescription() const
{
return this->getEntityValue("description");
}
void QLdapGroup::setName(const QString &value) const
{
this->setEntityValue("name",QStringList(value));
}
QString QLdapGroup::getName() const
{
return this->getEntityValue("name");
}
QDebug operator<<(QDebug debug, const QLdapGroup &user)
{
QDebugStateSaver saver(debug);
debug.nospace() << "QLdapGroup( ";
debug.nospace() << (QLdapEntity *)&user;
debug.nospace() << " )";
return debug;
}
QDebug operator<<(QDebug debug, const QLdapGroup *user)
{
QDebugStateSaver saver(debug);
debug.nospace() << *user;
return debug;
}
Добавление группы
Очистим конструктор главной формы от кода для работы с OU и добавим код:
QLdapEntry *e1 = new QLdapEntry();
QLdapGroup grp = QLdapGroup(e1);
grp.setName("gg-it-otdel");
grp.setDescription("Группа для IT");
qDebug() << grp;
QLdapMod *mod1 = new QLdapMod(e1, LDAP_MOD_ADD);
LDAPMod **m1 = mod1->getMods();
result = ldap->add("OU=Company,DC=altuninvv,DC=local", e1, m1);
delete mod1;
if ( result != LDAP_SUCCESS )
{
QString msg = QString("QLDAP group add() error: ") + QString(ldap_err2string(result));
qDebug("%s",msg.toLatin1().constData());
//return;
}
Запустим:
QLdapGroup( QLdapEntity( "description": "Группа для IT", "name": "gg-it", "objectClass": "group", ) )
GetMods
OP: 0
new dn = "CN=gg-it-otdel,OU=Company,DC=altuninvv,DC=local"
Added
QLDAP group add() error: Insufficient access
Close result = Success
Назначение прав для ldap-bind
У пользователя ldap-bind не хватает прав, в прошлых статьях мы уже предоставляли доступ этому пользователю, теперь же достаточно поставить галочки напротив:
- Создание объектов: Группа (Create Group objects)
- Удаление объектов: Группа (Delete Group objects)
Запустим еще раз:
QLdapGroup( QLdapEntity( "objectClass": "group", "description": "Группа для IT", "name": "gg-it-otdel", ) )
GetMods
OP: 0
new dn = "CN=gg-it-otdel,OU=Company,DC=altuninvv,DC=local"
Added
Close result = Success
Группа успешно добавлена.
Удаление группы
Добавим в конструктор главной формы код:
result = ldap->del("cn=gg-it-otdel,OU=Company,DC=altuninvv,DC=local");
if ( result != LDAP_SUCCESS )
{
QString msg = QString("QLDAP group del() error: ") + QString(ldap_err2string(result));
qDebug("%s",msg.toLatin1().constData());
//return;
}
Запустим:
Delete DN = "cn=gg-it-otdel,OU=Company,DC=altuninvv,DC=local"
Deleted
Правка группы
Добавим в конструктор главной формы код:
QLdapEntry *e2 = new QLdapEntry();
QLdapGroup grp2 = QLdapGroup(e2);
grp2.setDescription("Новая группа для IT");
QLdapMod *mod2 = new QLdapMod(e2, LDAP_MOD_REPLACE);
LDAPMod **m2 = mod2->getMods();
result = ldap->edit("ou=gg-it-otdel,OU=Company,DC=altuninvv,DC=local", m2);
delete mod2;
if ( result != LDAP_SUCCESS )
{
QString msg = QString("QLDAP group edit() error: ") + QString(ldap_err2string(result));
qDebug("%s",msg.toLatin1().constData());
//return;
}
Запустим:
GetMods
OP: 2
Edit DN = "ou=gg-it-otdel,OU=Company,DC=altuninvv,DC=local"
Edited
Описание группы изменилось!
Заключение:
Сегодня мы рассмотрели работу с группами в каталоге LDAP на примере AD.
Был модернизирован класс QLdapGroup.
Мы предоставили права пользователю ldap-bind на добавление и удаление групп.
Привели примеры добавления, удаления и правки группы.
Исходный код проекта вы можете скачать на GitFlic
Добавить комментарий