Drupal 7: Benutzer rollenbasiert nach einer bestimmten Zeit automatisch ausloggen

Autor: Sven am Tue, 20.10.2015 - 23:45

Leider gibt es hierfür kein Modul, dass einen User mit einer bestimmten Rolle nach einer definierten Zeit vom System abmeldet. Der Anwendungsfall hier war der Folgende: Im Büro existiert ein Rechner an dem alle zu unterschiedlichen Dienstzeiten arbeiten. Hier ist es dann vorgekommen, dass User vergessen haben sich vom CMS abzumelden und somit die Session weiterhin offen war und andere Mitarbeiter dann diese Session weiter nutzen konnten. Die maximale Dienstzeit einer Dienstschicht beträgt 3 Stunden, somit wurde vereinbart eingeloggte User nach 3 Stunden automatisiert auszuloggen.


autologout.info

name = Automated logout
description = Automated logout based on role and time
core = 7.x
version = 7.x-1.0

autologout.module

<?php

/**
 * Implements hook_menu().
 */
function autologout_menu() {
  $items = array();
  $items['admin/config/people/autologout'] = array(
    'title' => 'Automated logout',
    'description' => 'Setting for automated logout based on role and time',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('autologout_admin_settings'),
    'access arguments' => array('administer automated logout'),
  );

  return $items;
}

/**
 *  Implements hook_permission().
 */
function autologout_permission() {
  return array(
    'administer automated logout' => array(
      'title' => t('Administer automated logout'),
    )
  );
}

/**
 * Admin settings
 */
function autologout_admin_settings($form, &$form_state) {
  $form = array();
  $form['autologout_active'] = array(
    '#type' => 'checkbox',
    '#title' => t('Automated logout active'),
    '#default_value' => variable_get('autologout_active', 0),
  );

  $form['autologout_roles'] = array(
    '#type' => 'checkboxes',
    '#title' => t('Roles'),
    '#options' => array_map('check_plain', user_roles(TRUE)),
    '#default_value' => variable_get('autologout_roles', array()),
  );

  $form['autologout_time'] = array(
    '#type' => 'textfield',
    '#title' => t('Time in ms'),
    '#description' => t('Time in ms, default is 10800 = 3 hours'),
    '#default_value' => variable_get('autologout_time', 10800),
  );

  return system_settings_form($form);
}

/**
 * Implements hook_page_alter().
 */
function autologout_page_alter(&$page) {
  global $user;

  $logout = variable_get('autologout_active', 0);
  if ($logout) {
    $roles = variable_get('autologout_roles', array());
    if ($roles) {
      foreach ($roles as $role) {
        if ($role) {
          if (isset($user->roles[$role])) {
            if ((time() - variable_get('autologout_time', 10800)) > $user->login) {
              module_load_include('pages.inc', 'user');
              user_logout();
            }
          }
        }
      }
    }
  }
}