mirror of
https://github.com/altlinux/admc.git
synced 2025-03-17 02:50:12 +03:00
Implement GPLinkManager global object
Removed group policy link string data contained in the organization unit model items. Instead GPLinkManager object is used to get/update policy link changes locally. It helps to get the policy links info without domain database fetching and avoid GUI freezes, caused by policy widget update.
This commit is contained in:
parent
2ebf0f217e
commit
01e981d234
@ -36,6 +36,7 @@
|
||||
#include "utils.h"
|
||||
#include "managers/icon_manager.h"
|
||||
#include "fsmo/fsmo_utils.h"
|
||||
#include "managers/gplink_manager.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QDebug>
|
||||
@ -234,12 +235,13 @@ void PolicyImpl::on_ou_gplink_changed(const QString &ou_dn, const Gplink &gplink
|
||||
QModelIndex ou_item_index = search_gpo_ou_index(console, ou_dn);
|
||||
if (!ou_item_index.isValid())
|
||||
return;
|
||||
|
||||
update_ou_gplink_data(gplink.to_string(), ou_item_index);
|
||||
|
||||
QModelIndex target_policy_index = get_ou_child_policy_index(console, ou_item_index, policy_dn);
|
||||
if (!target_policy_index.isValid())
|
||||
return;
|
||||
|
||||
update_ou_item_gplink_data(gplink.to_string(), ou_item_index, console);
|
||||
|
||||
// Case of link deletion
|
||||
if (!gplink.contains(policy_dn)) {
|
||||
console->delete_item(target_policy_index);
|
||||
@ -267,14 +269,14 @@ void PolicyImpl::on_change_gplink_option_action(QAction *action)
|
||||
|
||||
bool checked = action->isChecked();
|
||||
|
||||
const QString gplink_string = ou_index.data(PolicyOURole_Gplink_String).toString();
|
||||
const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn);
|
||||
Gplink gplink = Gplink(gplink_string);
|
||||
gplink.set_option(gpo_dn, option, checked);
|
||||
const QString updated_gplink_string = gplink.to_string();
|
||||
|
||||
bool success = ad.attribute_replace_string(ou_dn, ATTRIBUTE_GPLINK, updated_gplink_string);
|
||||
if (success) {
|
||||
update_ou_item_gplink_data(updated_gplink_string, ou_index, console);
|
||||
update_ou_gplink_data(updated_gplink_string, ou_index);
|
||||
set_policy_item_icon(policy_index, checked, option);
|
||||
policy_results->update(policy_index);
|
||||
}
|
||||
@ -489,7 +491,7 @@ void console_policy_remove_link(const QList<ConsoleWidget *> &console_list, Poli
|
||||
const QModelIndex ou_index = target_console->search_item(policy_root, PolicyOURole_DN, ou_dn, {ItemType_PolicyOU});
|
||||
|
||||
if (ou_index.isValid()) {
|
||||
update_ou_item_gplink_data(gplink_new_string, ou_index, target_console);
|
||||
update_ou_gplink_data(gplink_new_string, ou_index);
|
||||
|
||||
for (const QString &dn : dn_list) {
|
||||
const QModelIndex gpo_index = get_ou_child_policy_index(target_console, ou_index, dn);
|
||||
@ -778,7 +780,8 @@ void console_policy_update_policy_results(ConsoleWidget *console, PolicyResultsW
|
||||
bool policy_is_enforced(QStandardItem *policy_item)
|
||||
{
|
||||
bool is_enforced = false;
|
||||
const QString gplink_string = policy_item->parent()->data(PolicyOURole_Gplink_String).toString();
|
||||
const QString ou_dn = policy_item->parent()->data(PolicyOURole_DN).toString();
|
||||
const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn);
|
||||
const Gplink gplink = Gplink(gplink_string);
|
||||
is_enforced = gplink.enforced_gpo_dn_list().contains(policy_item->data(PolicyRole_DN).toString());
|
||||
|
||||
@ -788,7 +791,8 @@ bool policy_is_enforced(QStandardItem *policy_item)
|
||||
bool policy_is_disabled(QStandardItem *policy_item)
|
||||
{
|
||||
bool is_disabled = false;
|
||||
const QString gplink_string = policy_item->parent()->data(PolicyOURole_Gplink_String).toString();
|
||||
const QString ou_dn = policy_item->parent()->data(PolicyOURole_DN).toString();
|
||||
const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn);
|
||||
const Gplink gplink = Gplink(gplink_string);
|
||||
is_disabled = gplink.disabled_gpo_dn_list().contains(policy_item->data(PolicyRole_DN).toString());
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "status.h"
|
||||
#include "utils.h"
|
||||
#include "managers/icon_manager.h"
|
||||
#include "managers/gplink_manager.h"
|
||||
#include "fsmo/fsmo_utils.h"
|
||||
|
||||
#include <QDebug>
|
||||
@ -122,7 +123,6 @@ void PolicyOUImpl::fetch(const QModelIndex &index) {
|
||||
const QString gplink_string = parent_object.get_string(ATTRIBUTE_GPLINK);
|
||||
const Gplink gplink = Gplink(gplink_string);
|
||||
const QList<QString> gpo_list = gplink.get_gpo_list();
|
||||
console->get_item(index)->setData(gplink_string, PolicyOURole_Gplink_String);
|
||||
|
||||
policy_ou_impl_add_objects_from_dns(console, ad, gpo_list, index);
|
||||
|
||||
@ -428,7 +428,7 @@ void PolicyOUImpl::link_gpo_to_ou(const QModelIndex &ou_index, const QString &ou
|
||||
if (!success)
|
||||
return;
|
||||
|
||||
update_ou_item_gplink_data(new_gplink_string, ou_index, console);
|
||||
update_ou_gplink_data(new_gplink_string, ou_index);
|
||||
|
||||
const QList<QString> added_gpo_list = [&]() {
|
||||
QList<QString> out;
|
||||
@ -543,9 +543,9 @@ QModelIndex get_ou_child_policy_index(ConsoleWidget *console, const QModelIndex
|
||||
return policy_index;
|
||||
}
|
||||
|
||||
void update_ou_item_gplink_data(const QString &gplink, const QModelIndex &ou_index, ConsoleWidget *console) {
|
||||
QStandardItem *ou_item = console->get_item(ou_index);
|
||||
ou_item->setData(gplink, PolicyOURole_Gplink_String);
|
||||
void update_ou_gplink_data(const QString &gplink, const QModelIndex &ou_index) {
|
||||
const QString ou_dn = ou_index.data(PolicyOURole_DN).toString();
|
||||
g_gplink_manager->set_gplink(ou_dn, gplink);
|
||||
}
|
||||
|
||||
QModelIndex search_gpo_ou_index(ConsoleWidget *console, const QString &ou_dn) {
|
||||
|
@ -36,7 +36,6 @@
|
||||
|
||||
enum PolicyOURole {
|
||||
PolicyOURole_DN = MyConsoleRole_LAST + 1,
|
||||
PolicyOURole_Gplink_String,
|
||||
PolicyOURole_Inheritance_Block,
|
||||
|
||||
PolicyOURole_LAST,
|
||||
@ -102,6 +101,6 @@ QModelIndex get_ou_child_policy_index(ConsoleWidget *console, const QModelIndex
|
||||
//Searches OU's index with given dn under "Group policy objects" item
|
||||
QModelIndex search_gpo_ou_index(ConsoleWidget *console, const QString &ou_dn);
|
||||
|
||||
void update_ou_item_gplink_data(const QString &gplink, const QModelIndex &ou_index, ConsoleWidget *console);
|
||||
void update_ou_gplink_data(const QString &gplink, const QModelIndex &ou_index);
|
||||
|
||||
#endif /* POLICY_OU_IMPL_H */
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "console_impls/item_type.h"
|
||||
#include "gplink.h"
|
||||
#include "managers/icon_manager.h"
|
||||
#include "managers/gplink_manager.h"
|
||||
#include "globals.h"
|
||||
|
||||
#include <QStandardItemModel>
|
||||
@ -79,9 +80,8 @@ void InheritedPoliciesWidget::update(const QModelIndex &index)
|
||||
|
||||
void InheritedPoliciesWidget::hide_not_enforced_inherited_links(bool hide)
|
||||
{
|
||||
const Gplink gplink = Gplink(selected_scope_index.
|
||||
data(PolicyOURole_Gplink_String).
|
||||
toString());
|
||||
const QString ou_dn = selected_scope_index.data(PolicyOURole_DN).toString();
|
||||
const Gplink gplink = Gplink(g_gplink_manager->ou_gplink(ou_dn));
|
||||
const QStringList gplink_strings = gplink.get_gpo_list();
|
||||
for (int row = 0; row < model->rowCount(); ++row) {
|
||||
if (!gplink_strings.contains(model->item(row)->data(RowRole_DN).toString()) &&
|
||||
@ -96,7 +96,8 @@ void InheritedPoliciesWidget::add_enabled_policy_items(const QModelIndex &index,
|
||||
if (index.data(ConsoleRole_Type) != ItemType_PolicyOU)
|
||||
return;
|
||||
|
||||
QString gplink_string = index.data(PolicyOURole_Gplink_String).toString();
|
||||
const QString ou_dn = index.data(PolicyOURole_DN).toString();
|
||||
const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn);
|
||||
const Gplink gplink = Gplink(gplink_string);
|
||||
|
||||
const QStringList enforced_links = gplink.enforced_gpo_dn_list();
|
||||
|
@ -121,7 +121,7 @@ LinkedPoliciesWidget::LinkedPoliciesWidget(ConsoleWidget *console_arg, QWidget *
|
||||
|
||||
gplink = gplink_arg;
|
||||
const QModelIndex scope_tree_ou_index = console->get_current_scope_item();
|
||||
update_ou_item_gplink_data(gplink.to_string(), scope_tree_ou_index, console);
|
||||
update_ou_gplink_data(gplink.to_string(), scope_tree_ou_index);
|
||||
|
||||
g_status->add_message(tr("Organizational unit ") + scope_tree_ou_index.data().toString() + tr("'s link orders have been succesfuly changed."),
|
||||
StatusType_Success);
|
||||
@ -198,7 +198,7 @@ void LinkedPoliciesWidget::on_item_changed(QStandardItem *item) {
|
||||
gplink.set_option(gpo_dn, option, is_checked);
|
||||
|
||||
const QModelIndex scope_tree_ou_index = console->get_current_scope_item();
|
||||
update_ou_item_gplink_data(gplink_string, scope_tree_ou_index, console);
|
||||
update_ou_gplink_data(gplink_string, scope_tree_ou_index);
|
||||
emit gplink_changed(scope_tree_ou_index);
|
||||
|
||||
hide_busy_indicator();
|
||||
@ -330,7 +330,7 @@ void LinkedPoliciesWidget::modify_gplink(void (*modify_function)(Gplink &, const
|
||||
update_link_items();
|
||||
|
||||
const QModelIndex scope_tree_ou_index = console->get_current_scope_item();
|
||||
update_ou_item_gplink_data(gplink_string, scope_tree_ou_index, console);
|
||||
update_ou_gplink_data(gplink_string, scope_tree_ou_index);
|
||||
emit gplink_changed(scope_tree_ou_index);
|
||||
|
||||
hide_busy_indicator();
|
||||
|
@ -24,13 +24,14 @@
|
||||
#include "adldap.h"
|
||||
#include "console_impls/item_type.h"
|
||||
#include "console_impls/policy_impl.h"
|
||||
#include "console_widget/console_widget.h"
|
||||
//#include "console_widget/console_widget.h"
|
||||
#include "console_widget/results_view.h"
|
||||
#include "globals.h"
|
||||
#include "settings.h"
|
||||
#include "status.h"
|
||||
#include "utils.h"
|
||||
#include "managers/icon_manager.h"
|
||||
#include "managers/gplink_manager.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QHeaderView>
|
||||
@ -140,22 +141,17 @@ void PolicyResultsWidget::update(const QString &new_gpo) {
|
||||
|
||||
model->removeRows(0, model->rowCount());
|
||||
|
||||
const QString base = g_adconfig->domain_dn();
|
||||
const SearchScope scope = SearchScope_All;
|
||||
const QList<QString> attributes = {ATTRIBUTE_NAME, ATTRIBUTE_GPLINK, ATTRIBUTE_OBJECT_CATEGORY};
|
||||
const QString filter = filter_CONDITION(Condition_Contains, ATTRIBUTE_GPLINK, gpo);
|
||||
const QHash<QString, AdObject> results = ad.search(base, scope, filter, attributes);
|
||||
const QStringList ou_linked_list = g_gplink_manager->linked_ou_list(gpo);
|
||||
|
||||
for (const AdObject &object : results.values()) {
|
||||
for (const QString &ou_dn : ou_linked_list) {
|
||||
const QList<QStandardItem *> row = make_item_row(PolicyResultsColumn_COUNT);
|
||||
|
||||
const QString dn = object.get_dn();
|
||||
const QString name = dn_get_name(dn);
|
||||
const QString name = dn_get_name(ou_dn);
|
||||
row[PolicyResultsColumn_Name]->setText(name);
|
||||
|
||||
row[PolicyResultsColumn_Path]->setText(dn_get_parent_canonical(dn));
|
||||
row[PolicyResultsColumn_Path]->setText(dn_get_parent_canonical(ou_dn));
|
||||
|
||||
const QString gplink_string = object.get_string(ATTRIBUTE_GPLINK);
|
||||
const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn);
|
||||
const Gplink gplink = Gplink(gplink_string);
|
||||
|
||||
const Qt::CheckState enforced_checkstate = [&]() {
|
||||
@ -185,9 +181,12 @@ void PolicyResultsWidget::update(const QString &new_gpo) {
|
||||
item->setCheckState(checkstate);
|
||||
}
|
||||
|
||||
row[0]->setData(dn, PolicyResultsRole_DN);
|
||||
row[0]->setData(ou_dn, PolicyResultsRole_DN);
|
||||
row[0]->setData(gplink_string, PolicyResultsRole_GplinkString);
|
||||
const QIcon icon = g_icon_manager->get_object_icon(object);
|
||||
|
||||
const QString obj_category = ou_dn == g_adconfig->domain_dn() ? OBJECT_CATEGORY_DOMAIN_DNS :
|
||||
OBJECT_CATEGORY_OU;
|
||||
const QIcon icon = g_icon_manager->get_object_icon(obj_category);
|
||||
row[0]->setIcon(icon);
|
||||
|
||||
model->appendRow(row);
|
||||
|
Loading…
x
Reference in New Issue
Block a user