Commit a68af1a4 authored by den tweed's avatar den tweed Committed by cosolom
Browse files

Issue #3225699 by TwEeD: Enforce User Fields Per Role

parent 6c7db7f3
Loading
Loading
Loading
Loading
+5 −12
Changes for enforce_user_fields.module: 5 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ function enforce_user_fields_help($route_name, RouteMatchInterface $route_match)
 * Implements hook_user_login().
 */
function enforce_user_fields_user_login($account) {
  if (enforce_user_fields_user_has_admin_role($account)) {
  if (enforce_user_fields_user_bypass($account)) {
    unset($_SESSION['enforce_user_fields']);
    return;
  }
@@ -61,18 +61,11 @@ function enforce_user_fields_form_user_form_alter(&$form, FormStateInterface $fo
 *   TRUE, if the given user account has at least one role with admin rights
 *   assigned, FALSE otherwise.
 */
function enforce_user_fields_user_has_admin_role(AccountInterface $account) {
function enforce_user_fields_user_bypass(AccountInterface $account) {
  static $user_has_admin_role = [];
  $uid = $account->id();
  if (!isset($user_has_admin_role[$uid])) {
    $roles = Role::loadMultiple($account->getRoles());
    foreach ($roles as $role) {
      if ($role->isAdmin()) {
        $user_has_admin_role[$uid] = TRUE;
        break;
      }
      $user_has_admin_role[$uid] = FALSE;
    }
    $user_has_admin_role[$uid] = $account->hasPermission('bypass enforce user fields');
  }
  return $user_has_admin_role[$uid];
}
@@ -84,7 +77,7 @@ function enforce_user_fields_user_has_admin_role(AccountInterface $account) {
function enforce_user_fields_have_unfilled_required_fields(AccountInterface $account){
  $result = FALSE;

  if ($account->isAnonymous() || enforce_user_fields_user_has_admin_role($account)) {
  if ($account->isAnonymous() || enforce_user_fields_user_bypass($account)) {
    return FALSE;
  }

@@ -129,7 +122,7 @@ function enforce_user_fields_have_unfilled_required_fields(AccountInterface $acc
 */
function enforce_user_fields_form_user_form_submit(&$form, FormStateInterface $form_state) {
  $account = \Drupal::currentUser();
  if (enforce_user_fields_user_has_admin_role($account)) {
  if (enforce_user_fields_user_bypass($account)) {
    unset($_SESSION['enforce_user_fields']);
    return;
  }
+3 −0
Changes for enforce_user_fields.permissions.yml: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
bypass enforce user fields:
  title: 'Bypass enforce user fields'
  description: 'Skips the enforce user fields redirecting.'
+1 −1
Changes for src/EventSubscriber/EnforceUserFieldsSubscriber.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ class EnforceUserFieldsSubscriber implements EventSubscriberInterface {
      'image.style_public',
      'image.style_private',
    ]);
    if ($this->currentUser->isAnonymous() || enforce_user_fields_user_has_admin_role($this->currentUser) || $skip_route) {
    if ($this->currentUser->isAnonymous() || enforce_user_fields_user_bypass($this->currentUser) || $skip_route) {
      return;
    }
    $is_ajax = $this->requestStack->getCurrentRequest()->isXmlHttpRequest();