Пятница, 26 февраля 2021 19:00

Работаем с группами – вставка, удаление, правка. Работа с LDAP в Qt5. Часть 9

Россия
Оцените материал
(0 голосов)

Сегодня мы рассмотрим работу с группами в каталоге 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

Группа успешно добавлена.

2021-02-24_15-07-58.png

Удаление группы

Добавим в конструктор главной формы код:

    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 на добавление и удаление групп.

Привели примеры добавления, удаления и правки группы.

Исходный код проекта вы можете скачать на Github.

Прочитано 280 раз Последнее изменение Пятница, 26 февраля 2021 20:30