Group Management (Active Directory)

Creation

To create a new Active Directory group, only a common name is required (cn):

<?php

use LdapRecord\Models\ActiveDirectory\Group;

$group = Group::create(['cn' => 'Accounting']);

To create a group inside of a particular Organizational Unit (OU), call the inside() method:

$group = (new Group)->inside('ou=Office Groups,dc=local,dc=com');

$group->cn = 'Accounting';

$group->save();

Members

When you create or locate a group on your directory, the members relationship is available to you on the model instance.

Getting Members

To get the immediate members of a group on your directory call the members relationship, and then get():

$group = Group::find('cn=Accounting,dc=local,dc=com');

$members = $group->members()->get();

Getting Members Recursively

Very often we use groups that are apart of other groups, that include members.

To retrieve these nested members, call the recursive() method, prior to get():

$group = Group::find('cn=Accounting,dc=local,dc=com');

$allMembers = $group->members()->recursive()->get();

Adding Members

In Active Directory, valid group members are other groups, users and contacts.

To add members to a group, call the members relationship, and then the attach() method:

$group = Group::find('cn=Accounting,dc=local,dc=com');

$user = User::find('cn=John Doe,dc=local,dc=com');

$group->members()->attach($user);

If the model was successfully added, or the model is already a member of the group, the attach() method will return the model instance you passed into it:

$office = $accounting->members()->attach(
    Group::create(['cn' => 'Office'])
);

// Displays 'cn=Office,dc=local,dc=com'
echo $office->getDn();

Adding Multiple Members

To add multiple members at once, provide an array of models to the attach() method:

$accounting = Group::find('cn=Accounting,dc=local,dc=com');

$accountants = User::in('ou=Accountants,ou=Users,dc=local,dc=com')->get();

$accounting->members()->attach($accountants);

Removing Members

To remove members on a group, call the members relationship, and then detach():

$group = Group::find('cn=Accounting,dc=local,dc=com');

$user = $group->members()->where('cn', '=', 'Steve Bauman')->first();

$group->members()->detach($user);

Removing Multiple Members

To remove multiple members at once, provide an array of models to the detach() method:

$group = Group::find('cn=Accounting,dc=local,dc=com');

$members = $group->members()
                 ->where('department', 'contains', 'Office')
                 ->get();

$group->members()->detach($members);

Removing All Members

To remove all immediate members from the group, call the detachAll() method:

$group = Group::find('cn=Accounting,dc=local,dc=com');

$removed = $group->members()->detachAll();

foreach ($removed as $member) {
    echo "Removed: " . $member->getDn();
}

Groups

When you create or locate a group on your directory, the groups relationship is available to you on the model instance.

Getting Groups

To get the immediate groups that a particular group is apart of on your directory call the groups relationship, and then get():

$group = Group::find('cn=Accounting,dc=local,dc=com');

$groups = $group->groups()->get();

Getting Groups Recursively

When you have a group that is apart of many parent groups in a hierarchy, you may need to retrieve these.

Call the recursive() method, prior to get() to retrieve them:

$group = Group::find('cn=Accounting,dc=local,dc=com');

$allGroups = $group->groups()->recursive()->get();

Adding Groups

To add groups to a particular group, call the attach() method on the groups relation:

$accounting = Group::find('cn=Accounting,dc=local,dc=com');

$office = Group::find('cn=Office,dc=local,dc=com');

$accounting->groups()->attach($office);

Adding Multiple Groups

To add multiple groups at once, provide an array of models to the attach() method:

$accounting = Group::find('cn=Accounting,dc=local,dc=com');

$officeGroups = Group::in('ou=Office,ou=Groups,dc=local,dc=com')->get();

$accounting->groups()->attach($officeGroups);

Removing Groups

To remove groups on a particular group, call the groups relationship, and then detach():

$accounting = Group::find('cn=Accounting,dc=local,dc=com');

$officeGroup = $accounting->groups()->where('cn', '=', 'Office')->first();

$accounting->groups()->detach($officeGroup);

Removing Multiple Groups

To remove multiple groups at once, provide an array of models to the detach() method:

$accounting = Group::find('cn=Accounting,dc=local,dc=com');

$officeGroups = $accounting->groups()
                           ->in('ou=Office,ou=Groups,dc=local,dc=com')
                           ->get();

$accounting->groups()->detach($officeGroups);

Removing All Groups

To remove all immediate groups of a particular group, call the detach() method:

$accounting = Group::find('cn=Accounting,dc=local,dc=com');

$removed = $accounting->groups()->detachAll();

foreach ($removed as $group) {
    echo "Removed: " . $group->getDn();
}