Vom: 22.12.2011

Pimcore User Berechtigungen - Einklinken selbst gemacht

Wer selbst Plugins für Pimcore schreibt, will diese vielleicht nicht jedem User zur Verfügung stellen. Pimcore biete ein System, Usern einzelne Berechtigungen für Komponenten der Oberfläche zuzuteilen. In dieses Berechtigungssystem kann man sich in seinem Plugin mit ein paar einfachen Schritten einklicken. Die zur Verfügung stehenden Berechtigungen stehen in der Tabelle  users_permission_definitions und bestehen aus ihrem Key und der angezeigten Übersetzung. Als Plugin kann man nun bei der Installation hier seine eigenen Berechtigungen eintragen - vorzugsweise in der install() Methode des Plugins:

			try {
				$db = Pimcore_API_Plugin_Abstract::getDb();
				$db->exec("INSERT INTO users_permission_definitions (".$db->quoteIdentifier("key").", ".$db->quoteIdentifier("translation").") VALUES (".$db->quote("custom_permission").", ".$db->quote("permission_custom_permission");
			} catch (Exception $e) {
				return "Error installing the User Permission: ".$e->getMessage();
			}

Der Klartext der Berechtigung (hier: "permission_custom_permission") wird von Pimcore übersetzt und sollte in den texts des Plugins behandelt werden. Beim Deinstallieren des Plugins müssen evtl. gewährte Berechtigungen natürlich wieder entfernt werden:

			try {
				$db = Pimcore_API_Plugin_Abstract::getDb();
				$db->exec("DELETE FROM users_permission_definitions WHERE ".$db->quoteIdentifier("key")." = ".$db->quote("custom_permission"));
			} catch (Exception $e) {
				return "Error uninstalling the User Permission: ".$e->getMessage();
			}

Im Frontend kann diese Berechtigung dann natürlich auch abgefragt werden:

	var user = pimcore.globalmanager.get("user");
	if (user.isAllowed("custom_permission")) {
		// do something fancy
	}

Oder in PHP:

	$user = Zend_Registry::set("pimcore_user");
	if ($user->isAllowed("custom_permission")) {
		// do something fancy
	}