Adding and Removing Users in SilverStripe | OpsBlu Docs

Adding and Removing Users in SilverStripe

Manage CMS users in SilverStripe including creating, editing, and removing user accounts.

Manage user access to SilverStripe CMS by adding, editing, and removing user accounts.

Prerequisites

  • Admin access to SilverStripe CMS
  • Understanding of SilverStripe permission groups

Adding Users via CMS

Step 1: Access Security Section

  1. Log in to SilverStripe CMS
  2. Click Security in the left sidebar
  3. Select Users tab

Step 2: Create New User

  1. Click Add Member
  2. Fill in required fields:
    • First Name
    • Surname
    • Email (must be unique)
    • Password

Step 3: Assign Groups

  1. Go to Groups tab
  2. Select appropriate groups (e.g., "Administrators", "Content Authors")
  3. Click Save

User Groups

Default Groups

  • Administrators: Full CMS access
  • Content Authors: Can edit content
  • Content Publishers: Can publish pages

Custom Groups

Create custom groups in Security > Groups > Add Group


Adding Users Programmatically

Via Build Task

File: app/src/Tasks/CreateUserTask.php

<?php

namespace App\Tasks;

use SilverStripe\Dev\BuildTask;
use SilverStripe\Security\Member;
use SilverStripe\Security\Group;

class CreateUserTask extends BuildTask
{
    private static $segment = 'create-user';

    protected $title = 'Create CMS User';

    protected $description = 'Creates a new CMS user';

    public function run($request)
    {
        $member = Member::create();
        $member->FirstName = 'John';
        $member->Surname = 'Doe';
        $member->Email = 'john@example.com';
        $member->setPassword('SecurePassword123!');
        $member->write();

        // Add to administrators group
        $adminGroup = Group::get()->filter('Code', 'administrators')->first();
        if ($adminGroup) {
            $member->Groups()->add($adminGroup);
        }

        echo "User created: {$member->Email}\n";
    }
}

Run:

sake dev/tasks/create-user

Editing Users

Via CMS

  1. Security > Users
  2. Click user to edit
  3. Modify fields
  4. Save

Change Password

  1. Open user
  2. Go to Password field
  3. Enter new password
  4. Confirm password
  5. Save

Removing Users

Via CMS

  1. Security > Users
  2. Select user
  3. Click Delete
  4. Confirm deletion

Warning: Deletion is permanent.

Alternative: Deactivate User

Better practice than deletion:

File: app/src/Extensions/MemberExtension.php

<?php

namespace App\Extensions;

use SilverStripe\ORM\DataExtension;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\CheckboxField;

class MemberExtension extends DataExtension
{
    private static $db = [
        'IsActive' => 'Boolean',
    ];

    private static $defaults = [
        'IsActive' => true,
    ];

    public function updateCMSFields(FieldList $fields)
    {
        $fields->addFieldToTab(
            'Root.Main',
            CheckboxField::create('IsActive', 'User is active')
        );
    }
}

Register extension:

SilverStripe\Security\Member:
  extensions:
    - App\Extensions\MemberExtension

Bulk User Management

Import Users from CSV

File: app/src/Tasks/ImportUsersTask.php

<?php

namespace App\Tasks;

use SilverStripe\Dev\BuildTask;
use SilverStripe\Security\Member;
use SilverStripe\Security\Group;

class ImportUsersTask extends BuildTask
{
    private static $segment = 'import-users';

    public function run($request)
    {
        $csvFile = BASE_PATH . '/users.csv';
        $handle = fopen($csvFile, 'r');

        // Skip header row
        fgetcsv($handle);

        while (($data = fgetcsv($handle)) !== false) {
            $member = Member::create();
            $member->FirstName = $data[0];
            $member->Surname = $data[1];
            $member->Email = $data[2];
            $member->setPassword($data[3]);
            $member->write();

            echo "Created: {$member->Email}\n";
        }

        fclose($handle);
    }
}

CSV Format (users.csv):

FirstName,Surname,Email,Password
John,Doe,john@example.com,password123
Jane,Smith,jane@example.com,password456

Security Best Practices

Password Requirements

File: app/_config/config.yml

SilverStripe\Security\Member:
  password_validator:
    min_length: 8
    require_digits: true
    require_lowercase: true
    require_uppercase: true

Lock Accounts After Failed Logins

SilverStripe\Security\Member:
  lock_out_after_incorrect_logins: 5
  lock_out_delay_mins: 15

Troubleshooting

Can't Create User

Error: Email already exists

Solution: Email must be unique. Check if user exists.

Password Not Working

Solution:

  1. Verify password meets requirements
  2. Check no extra spaces
  3. Use "Forgot Password" link

Next Steps


Additional Resources