wake-up-neo.net

Gruppieren von Benutzern unter dem übergeordneten Benutzer

Wie es sein muss:

  • ein "Superuser" mit Benutzerrolle Firma
  • normale Benutzer mit Benutzerrolle Mitarbeiter

  1. Ich möchte nicht, dass "Superuser" mehr Funktionen haben, insbesondere admin-ähnliche Funktionen.

  2. Ich möchte keine benutzerdefinierten Posts zum Emulieren von company verwenden, da die Tabelle postmeta im Vergleich zu den anderen bereits zu groß wird. Außerdem muss ich mich anmelden können und der "Superuser" kann seine Benutzer im Frontend verwalten.

  3. Normale Benutzer sollten von "Superuser" a.k.a abfragbar sein und alle Benutzer abfragen, die Mitarbeiter in diesem bestimmten Unternehmen sind.

Wie diese Art von Verbindung zwischen Benutzer und "Superuser" zu machen? Offensichtlich ist usermeta der richtige Weg, aber wie geht man damit um? Ich brauche keinen riesigen Code, der funktioniert, ich brauche eine Idee wie es funktionieren würde.

4
N00b

Rollen

Zuerst müssen Sie die 2 Rollen registrieren, siehe add_role .

Wenn Sie die Rolle registrieren, können Sie beliebige Funktionen zuweisen.

Fügen Sie die Rollen nur hinzu, wenn Ihr Theme/Plugin aktiviert ist, und entfernen Sie sie möglicherweise, wenn es deaktiviert ist (siehe remove_role ).


Metadaten

Sie können die Zuordnung mithilfe eines Metaeintrags wie company_employees vornehmen, in dem ein Array von Benutzer-IDs gespeichert ist. Sie können eine benutzerdefinierte Funktion zum Abrufen/Festlegen von Mitarbeitern für einen Unternehmensbenutzer zuordnen.

Holen Sie sich Mitarbeiter eines Unternehmens

Beispielcode für eine Funktion, die einem Benutzer ein Array von Mitarbeitern zurückgibt:

function getEmployees(\WP_User $user) {
  // if the user has not the role "company_role" can't have employees
  if ( ! in_array('company_role', $user->roles, true) ) {
    return array();
  }
  $meta = get_user_meta($user->ID, 'company_employees', true);
  if (empty($meta)) {
    return array();
  }

  $query = new WP_User_Query(array(
    'role'    => 'employee_role',
    'include' => (array) $meta
  ));

  return $query->results;
}

Mitarbeiter einer Firma zuordnen

Auf die gleiche Weise können Sie eine Funktion schreiben, um einen Mitarbeiter einem Firmenbenutzer zuzuweisen:

function assignToCompany(\WP_User $employee, \WP_User $company) {
  // if the company user has not the role "company_role" can't have employees
  if ( ! in_array('company_role', $company->roles, true) ) {
     return false;
  }
  // if the employee user has not the role "employee_role" can't be assigned
  if ( ! in_array('employee_role', $employee->roles, true) ) {
     return false;
  }
  // get current employees
  $employees = get_user_meta($company->ID, 'company_employees', true);
  is_empty($employees) and $employees = array();
  // add employee and update
  $employees[] = $employee->ID;
  $update = update_user_meta($company->ID, 'company_employees', $employees);

  return (int) $update > 0;
}

Benutzeroberfläche

Natürlich benötigen Sie eine Art Benutzeroberfläche, um den Benutzern Mitarbeiter zuzuweisen. Wenn ein Mitarbeiter möglicherweise nur eine Firma hat, können Sie auf der Benutzer-Bearbeitungsseite ein Dropdown-Menü anzeigen, in dem Sie alle Firmen auflisten. Beim Speichern können Sie die oben genannte Funktion verwenden, um den Mitarbeiter im Meta des Firmenbenutzers zu speichern.

Das zu tun:

  • schauen Sie sich edit_user_profile hook an, um das Dropdown-Menü zu drucken. Stellen Sie sicher, dass das Menü nur Benutzern angezeigt wird, die die Mitarbeiterfirma bearbeiten dürfen
  • schauen Sie sich edit_user_profile_update hook an, um die Firma im Metafeld zu speichern. Fahren Sie nur dann mit dem Speichern fort, wenn der aktuelle Benutzer die Mitarbeiterfirma bearbeiten darf
  • stellen Sie sicher, dass Sie beim Drucken des Dropdown-Menüs auch ein nonce-Feld hinzufügen, und überprüfen Sie es, bevor Sie mit dem Speichern fortfahren. Siehe wp_nonce_field() und wp_verify_nonce()

Letzter Schliff

Firmenbenutzer-Admin-Benutzeroberfläche

Sie können die Liste der Mitarbeiter, die derzeit einem Unternehmensbenutzer zugeordnet sind, auf der Benutzerbearbeitungsseite hinzufügen.

Es bearbeitbar zu machen ist ein Bonus.

Dienstprogrammfunktionen

Sie können einige Dienstprogrammfunktionen wie isEmployee(), isCompany() hinzufügen, die ein Benutzerobjekt ot id akzeptieren und ein true/false zurückgeben, wenn der Benutzer die zugehörige Rolle hat.

isEmployee akzeptiert möglicherweise auch einen optionalen Parameter für einen Unternehmensbenutzer und gibt nur dann true zurück, wenn der Benutzer ein Mitarbeiter dieses bestimmten Unternehmens ist.

Benutzerdefinierte Fähigkeit

Es kann eine gute Idee sein, eine benutzerdefinierte Funktion 'assign_employee' einzuführen, die Sie Administratoren und jeder anderen Rolle zuweisen können, die Sie in der Lage sein möchten, Mitarbeitern Benutzer zu Unternehmensbenutzern zuzuweisen. Dies kann hilfreich sein, wenn Sie die Dropdown-Liste des Unternehmens anzeigen und das Unternehmens-Meta speichern müssen.

Mit dieser Funktion können Sie mithilfe von current_user_can('assign_employee') überprüfen, ob ein Benutzer dazu berechtigt ist.

Um einer vorhandenen Rolle eine benutzerdefinierte Funktion zuzuweisen, rufen Sie WP_Roles::add_cap() auf.

Wenn Sie sich dazu entschließen, denken Sie daran, die Funktion zu entfernen, wenn das Plugin/Theme deaktiviert ist.

Frontend Unternehmen

Sie wissen nicht, ob Sie es benötigen, können jedoch eine "Unternehmensseite" im Frontend erstellen, indem Sie eine benutzerdefinierte Seitenvorlage und einen benutzerdefinierten Endpunkt verwenden, um die Beschreibung des Unternehmens und eine Liste aller Mitarbeiter anzuzeigen

4
gmazzap