PluginDatenschutz

Damit Stud.IP auf Nutzeranfrage hin die im System gespeicherten nutzerbezogenen Daten aus Plugins mit ausliefern kann, ist es notwendig dass das Plugin das Interface PrivacyPlugin implementiert und die Funktion exportUserData(StoredUserData $storage) besitzt. Diese Funktion erhält eine Instanz der StoredUserData Klasse und kann darin die gespeicherten personenbezogenen Daten (sowohl tabellarische Daten als auch Dateien) ablegen.

Beim Löschen von Personen wird das Event UserDidDelete gesendet, woraufhin ein Plugin auch seine nutzerbezogenen Daten zu dieser Person aus dem System löschen sollte. Werden einzelne Teile von Personendaten gelöscht, zum Beispiel zum Anonymisieren einer Person, wird das Event UserDataDidRemove gesendet. Dieses Event liefert als weiteren Parameter noch den Typ der gelöschten Personendaten. Die verfügbaren Typen können dem Beispiel unten entnommen werden. Welche dieser Typen für das Plugin relevant sind hängt von den durch das Plugin gespeicherten Daten ab.

Ein Plugin könnte folgendermaßen aussehen:

class MyPlugin extends StudIPPlugin implements StandardPlugin, PrivacyPlugin
{

    public function __construct()
    {
        parent::__construct();
        NotificationCenter::addObserver($this, 'deleteUser', 'UserDidDelete');
        NotificationCenter::addObserver($this, 'removeData', 'UserDataDidRemove');
    }
    ...

    /**
     * Export available data of a given user into a storage object
     * (an instance of the StoredUserData class) for that user.
     *
     * @param StoredUserData $store object to store data into
     */

    public function exportUserData(StoredUserData $storage)
    {
        $db = DBManager::get();

        $table_data = $db->fetchAll('SELECT * FROM my_table WHERE user_id = ?', [$storage->user_id]);
        $storage->addTabularData('Anzeigetitel', 'my_table', $table_data);

        $file_data = $db->fetchAll('SELECT * FROM my_files WHERE user_id = ?', [$storage->user_id]);
        foreach ($file_data as $file) {
            $storage->addFileAtPath($file['name'], $file['path']);
        }
    }

    /**
    * delete given user from plugin
    *
    * @param String $event name of the notification event
    * @param User $user
    */

    public function deleteUser($event, $user)
    {
        ...
        PageLayout::postInfo('Nutzer X aus MyPlugin gelöscht.');
    }

    /**
    * delete data of given user from plugin
    *
    * @param String $event name of the notification event
    * @param String $user_id
    * @param String $type of data that should be removed
    */

    public function removeData($event, $user_id, $type)
    {
        switch ($type) {
            case 'course_documents':
            case 'personal_documents':
                ...
                PageLayout::postInfo('Dokumente von Nutzer X aus MyPlugin gelöscht');
                break;
            case 'course_contents':
            case 'personal_contents':
                ...
                PageLayout::postInfo('Inhalte von Nutzer X aus MyPlugin gelöscht');
                break;
            case 'names':
                ...
                PageLayout::postInfo('Namen von Nutzer X aus MyPlugin gelöscht');
                break;
            case 'memberships':
                ...
                PageLayout::postInfo('Veranstaltungszuordnungen von Nutzer X aus MyPlugin gelöscht');
                break;
        }
    }
}

Letzte Änderung am June 06, 2019, at 02:05 PM von tleilax.