Fragen zu 4.0.8

Allgemeine Diskussionen zu ConPresso 4. Handhabung, Möglichkeiten, Verständnisfragen.
Achtung: Bitte benutzt wenn möglich die themenspezifischen Foren!
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Fragen zu 4.0.8

Beitrag von MarkusR »

Ich beziehe mich auf Aussagen aus folgender Ankündigung:

http://community.conpresso.de/viewtopic ... 4718#24718

Sicherheit: Der Aufruf einer externen URL zeigt eine Warnung an. Modulentwickler können Prefixe von dieser Warnung freischalten, indem Sie im Modul-Array einen Wert für 'externalHelpUrl' definieren.
Kann man das mal näher erläutern? Geht es dabei um die auf die Fragezeichen-Buttons gelegten Hilfefunktionen oder die Links in der Hilfe-Navigation? Gemerkt habe ich davon noch nichts...
Und wie sieht die 'externalHelpUrl'-Definition aus?
Im oberen Frame werden die Rubriken nicht auf Basis der Navigation angezeigt, um ein direktes Login in eine Rubrik zu ermöglichen.
Welche Änderungen sind dafür verantwortlich? Ich würde das gerne in einigen 4.0.7 Auftritten nachrüsten, ohne alle Modifikationen zu verlieren.
Schade daß es noch kein direktes "Artikel bearbeiten"-Login gibt (das hatte ich mal von mir aus für eine 4.0.3 gebaut...)
Experimentelles Feature: Schutz von Dateien mit bestimmten Dateinamen vor unberechtigtem Download über eine .htaccess-Umleitung.
Wo und wie kann man das sehen? Eine .htaccess-Datei habe ich nicht gefunden...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Re: Fragen zu 4.0.8

Beitrag von balu »

MarkusR hat geschrieben:Ich beziehe mich auf Aussagen aus folgender Ankündigung:

http://community.conpresso.de/viewtopic ... 4718#24718

Sicherheit: Der Aufruf einer externen URL zeigt eine Warnung an. Modulentwickler können Prefixe von dieser Warnung freischalten, indem Sie im Modul-Array einen Wert für 'externalHelpUrl' definieren.
Kann man das mal näher erläutern? Geht es dabei um die auf die Fragezeichen-Buttons gelegten Hilfefunktionen oder die Links in der Hilfe-Navigation? Gemerkt habe ich davon noch nichts...
Und wie sieht die 'externalHelpUrl'-Definition aus?
Die Hilfe kann ja über den ref-Parameter auch auf externe Seiten verweisen:
http://www.example.com/conpresso/_manua ... w.heise.de

Wenn Ihr in einem Modul so auf externe Links verweist, wird also auch eine Warnung ausgegeben.

Vermeiden könnt Ihr das, indem ihr in der Modul-Definition ($GLOBALS['modules'][$moduleDirectory]) den neuen Parameter "externalHelpUrl" angebt.

Der Parameter ist ein "Prefix", die als "ref" übergebene URL muss am Anfang dieser URL entsprechen:
http://www.heise.de
http://www.heise
würden also die Warnung vermeiden.
MarkusR hat geschrieben:
Im oberen Frame werden die Rubriken nicht auf Basis der Navigation angezeigt, um ein direktes Login in eine Rubrik zu ermöglichen.
Welche Änderungen sind dafür verantwortlich? Ich würde das gerne in einigen 4.0.7 Auftritten nachrüsten, ohne alle Modifikationen zu verlieren.
In frame_titel.php in den Zeilen 143 und 164 wurde unter anderem das folgende geprüft:
$_SESSION['SID_navigation_id']==$v['id']

Wenn man direkt in die Rubrik einloggt ist die navigation_id aber noch nicht in der Session, darum würde dort nicht die aktuelle Rubrik ausgewählt.
MarkusR hat geschrieben: Schade daß es noch kein direktes "Artikel bearbeiten"-Login gibt (das hatte ich mal von mir aus für eine 4.0.3 gebaut...)
Ich hatte mit einer eigenen Version dafür Probleme mit fehlenden Sessiondaten, so dass die Artikel dann teilweise in der falschen Rubrik gespeichert wurden.

Hattest Du das hier in der Community? Dann suche ich mir das nochmal raus und schaue was Du da anders gemacht hast.
MarkusR hat geschrieben:
Experimentelles Feature: Schutz von Dateien mit bestimmten Dateinamen vor unberechtigtem Download über eine .htaccess-Umleitung.
Wo und wie kann man das sehen? Eine .htaccess-Datei habe ich nicht gefunden...
Das Problem ist, dass eine .htaccess-Datei auf Servern zu Problemen führt, die das nicht unterstützen / erlauben.

In der _data/index.php wird der Mechanismus kurz erklärt und auch die zwei Zeilen, die für eine .htaccess nötig wären.

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Re: Fragen zu 4.0.8

Beitrag von MarkusR »

balu hat geschrieben:Hattest Du das hier in der Community? Dann suche ich mir das nochmal raus und schaue was Du da anders gemacht hast.
Ich glaube nicht. Damals gab es nicht mal das direkte Rubriklogin, aber ich hatte im Quellcode den Ansatz einer Prüfung des Parameters "startrubric" endeckt und habe das ganze dann aufgebohrt, damit Links in dieser Form
../_admin/index.php?startrubric=RUBRIKNAME&article_action=articles_modify&article_nr=27
direkt zur Bearbeitung des Artikels führen, inkl. korrekter Einstellung der Rubrik. Das führte dann allerdings erst mal zur Entwicklung des Rubrik-Platzhalters (<!-- RUBRIC: Name; -->) der dann später als Value-Platzhalter eingeführt wurde (<!-- VALUE: rubric; name; -->). Darüber geriet die direkte Artikelbearbeitung in Vergessenheit.

Was diesen ref-Parameter angeht kann ich es dennoch nicht nachvollziehen, weil bei mir auch die externen Links ohne Meldung aufgerufen werden. Ein Aufruf der Hilfe in der Form
../_manual/index.php?ref=http%3A%2F%2Fmanual.conpresso4.de%2Fform%2Fsettings.htm&show=modules
zeigt die gewünschte Seite direkt an. Keine Meldung. Mache ich was falsch?
(ja, es ist eine 4.0.8-Installation...)

Könnte es sein, daß die Prüfung
if (substr($ref, 0, strlen($v['externalHelpUrl'])) == $v['externalHelpUrl'])
in dem Fall, daß nichts angegeben wird, prüft, ob es einen Teil mit der Länge Null gibt, der nichts enthält? Das dürfte immer true ergeben...
Eine Datei in der Form

Code: Alles auswählen

<?php
echo (substr($ref, 0, strlen($v['externalHelpUrl'])) == $v['externalHelpUrl'])  ? "Stimmt!" : "Stimmt nicht!";
?>
sagt bei mir immer "Stimmt!", da die Variable $v nicht existiert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Habe gerade den Hack für den Rubrik-Login für 4.0.3 wiedergefunden:
http://community.conpresso.de/viewtopic.php?t=2593
der damals bestens funktionierte (inkl. korrekter Einstellung des title-Frames...)
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Re: Fragen zu 4.0.8

Beitrag von balu »

Hi Markus,
MarkusR hat geschrieben:Was diesen ref-Parameter angeht kann ich es dennoch nicht nachvollziehen, weil bei mir auch die externen Links ohne Meldung aufgerufen werden. Ein Aufruf der Hilfe in der Form
../_manual/index.php?ref=http%3A%2F%2Fmanual.conpresso4.de%2Fform%2Fsettings.htm&show=modules
zeigt die gewünschte Seite direkt an. Keine Meldung. Mache ich was falsch?
(ja, es ist eine 4.0.8-Installation...)

Könnte es sein, daß die Prüfung
if (substr($ref, 0, strlen($v['externalHelpUrl'])) == $v['externalHelpUrl'])
in dem Fall, daß nichts angegeben wird, prüft, ob es einen Teil mit der Länge Null gibt, der nichts enthält? Das dürfte immer true ergeben...
Eine Datei in der Form

Code: Alles auswählen

<?php
echo (substr($ref, 0, strlen($v['externalHelpUrl'])) == $v['externalHelpUrl'])  ? "Stimmt!" : "Stimmt nicht!";
?>
sagt bei mir immer "Stimmt!", da die Variable $v nicht existiert.
Das ist natürlich absolut richtig, hat mich aber etwas an meinem Verstand zweifeln lassen, weil ich eigentlich sicher war, das sowohl gesetzt als auch nicht gesetzt geprüft zu haben.

Klassischer Fall von "nicht alle Eventualitäten" bedacht. Getestet wurde, ob die Warnung ausgegeben wird, wenn kein Modul aktiv ist und ob ein aktives Modul die Warnung überspringt, wenn der Wert gesetzt ist.

Vergessen wurde aber ein aktives Modul ohne den Wert zu prüfen.

Vor das substr() habe ich jetzt darum noch eine Prüfung eingebaut, ob der Wert gesetzt ist:

!empty($v['externalHelpUrl']) &&

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi Markus,
MarkusR hat geschrieben:Habe gerade den Hack für den Rubrik-Login für 4.0.3 wiedergefunden:
http://community.conpresso.de/viewtopic.php?t=2593
der damals bestens funktionierte (inkl. korrekter Einstellung des title-Frames...)
ich wollte Dir hierzu noch schreiben, dass Du nicht startrubric, sondern rubric als Parameter benutzen musst, damit das (im aktuellen Code) funktioniert. Außerdem wird dort nicht nach dem Rubriknamen, sondern nur nach der ID gesucht.

Da das ganze sowieso nur für Admins eine Hilfe sein soll und das vermutlich nicht unbedingt für SEO nötig ist sollte die ID reichen, oder?

_admin/index.php?rubric=1

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Hallo balu,

ist mir schon klar, daß es nicht mehr "startrubric" ist. :wink: Anfang 2006 war das aber noch so.

Quellcode:
if (!empty($_REQUEST['startrubric'])) { // FIXME, Steffen: describe in manual that a user can directly log in to a rubric

Meine Frage oben bezog sich auf folgendes:
Was muß ich in einer 4.0.7 ändern, damit der Backend-Rubrik-Login so funktioniert wie in 4.0.8 ... außer Dateien einfach überschreiben natürlich.
(ich kann das natürlich auch selbst herausfinden, aber vielleicht weiß der Autor ja noch, was geändert wurde...)

Der Login in die direkte Artikelbearbeitung war nur ein Wunsch... der aber realisierbar sein sollte, wenn ich das schon in 4.0.3 geschafft habe.
Ich möchte nur ungern da was entwickeln, was dann wieder durch andere Parameter in kommenden Versionen zunichte gemacht wird.

Wunsch ist also ein Login in der Form:
_admin/index.php?rubric=1&article_action=articles_modify&articlenr=27
oder auch (wenn eine Artikelnummer automatisch die Artikelbearbeitung definiert) nur
_admin/index.php?rubric=1&article_nr=27
den man im Template einfach mittels
_admin/index.php?rubric=<!-- VALUE: rubric; id; -->&articlenr=<!-- Value: articlenr -->
erzeugen könnte.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi Markus,

die Änderungen sind auch bei mir schon etwas länger her, aber wozu gibt es Logfiles:

r194 | balu | 2007-04-16 10:09:05 +0200 (Mon, 16 Apr 2007) | 1 line
Changed paths:
M /conpresso/trunk/_admin/frame_titel.php

don't make the display of the rubric in the head based on the navigation (to allow direct rubric login)
------------------------------------------------------------------------
r148 | balu | 2007-01-24 10:49:10 +0100 (Wed, 24 Jan 2007) | 1 line
Changed paths:
M /conpresso/trunk/_admin/index.php

Allow direct login to a rubric (fix);
------------------------------------------------------------------------
r147 | balu | 2007-01-23 15:41:27 +0100 (Tue, 23 Jan 2007) | 1 line
Changed paths:
M /conpresso/trunk/_admin/index.php
M /conpresso/trunk/_cfg/global_footer.php.dist

Allow direct login to a rubric; added transparent gif to do so;


Ich habe gerade schon Pakete für einen Release-Candidate für die 4.0.9 geschnürt, da bekomme ich das nicht mehr mit rein.

Aber ich denke, man muss dafür nur _admin/index.php anpassen und den else-Fall erweitern, der zu dem folgenden führt:

echo htmlspecialchars(BASE_REL.'_admin/articles.php?'.$SID);

Als Parameter würde ich "nr" nehmen, wie bei den Detailseiten und für die Artikelverwaltung allgemein.

Statt nur SID als Parameter zu ergänzen, müsste man dann falls $_REQUEST['nr'] gesetzt ist, noch die folgenden Parameter ergänzen:

action=articles_modify&nr=' . (int)$_REQUEST['nr']

Ich schaue mir das morgen nochmal an und teste es hier. Dann ist es im endgültigen Release enthalten.

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Was mich gerade wundert, weil ich mich mit den Benutzern beschäftige:

Wenn ich einem Redakteur nur das Recht aktiv für eine Rubrik zuweise, dann werden damit ALLE Rechte aktiviert, also genauso wie Global (Alle Rechte zuweisen).

Die Hilfe sagt aber
Über die Spalte "Aktiv" wird gesteuert, ob einem Benutzer eine Rubrik im ConPresso-Backend angezeigt wird
Soll man dann damit auch ALLE Rechte erhalten?

Weiterhin kann ein Redakteur, der kein Recht hat, einen Artikel zu erstellen, dennoch einen Artikel kopieren, dann bearbeiten und speichern... und somit einen Artikel anlegen. Das sollte nicht so sein!

Dann kann ein Redakteur, der kein Recht für den Upload besitzt, dennoch Dateien hochladen, wenn auch nur für alle Rubriken. Dann kann er es aber zur Bearbeitung aufrufen und der Rubrik zuweisen. Er kann es dann zwar nicht mehr in der Liste sehen, aber nun ist es in der Rubrik verfügbar.
Upload, Löschen und Verschieben sollten ihm ohne Rechte für einen Upload nicht möglich sein!
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

man muss dafür nur _admin/index.php anpassen und den else-Fall erweitern, der zu dem folgenden führt:

echo htmlspecialchars(BASE_REL.'_admin/articles.php?'.$SID);

Als Parameter würde ich "nr" nehmen, wie bei den Detailseiten und für die Artikelverwaltung allgemein.

Statt nur SID als Parameter zu ergänzen, müsste man dann falls $_REQUEST['nr'] gesetzt ist, noch die folgenden Parameter ergänzen:

action=articles_modify&nr=' . (int)$_REQUEST['nr']

Ich schaue mir das morgen nochmal an und teste es hier. Dann ist es im endgültigen Release enthalten.
Habe ich jetzt mal selbst eingebaut, weil ich es gerade gut gebrauchen kann.

Ich habe einfach Zeile 232 von

Code: Alles auswählen

                else                                echo htmlspecialchars(BASE_REL.'_admin/articles.php?'.$SID);
geändert in

Code: Alles auswählen

                else echo htmlspecialchars(BASE_REL.'_admin/articles.php?'.( $_REQUEST['nr'] ? 'action=articles_modify&nr=' . (int)$_REQUEST['nr'] : '' ).$SID);
und Zeile 236 von

Code: Alles auswählen

            <frame name="cpo_content"    scrolling="auto" noresize src="<?php echo BASE_REL.'_admin/login.php?action='.htmlspecialchars($naction).'&rubric='.$_REQUEST['rubric'].'&'.$SID; ?>">
in

Code: Alles auswählen

            <frame name="cpo_content"    scrolling="auto" noresize src="<?php echo BASE_REL.'_admin/login.php?action='.htmlspecialchars($naction).'&rubric='.$_REQUEST['rubric'].( $_REQUEST['nr'] ? '&nr=' . (int)$_REQUEST['nr'] : '' ).'&'.$SID; ?>">
Im Artikeltemplate ist noch ein Login versteckt in der Form

Code: Alles auswählen

<a href="/_admin/index.php?rubric=<!-- Value: rubric; id; -->&nr=<!-- Value: articlenr -->" target="backend" rel="nofollow" ><img src="/_images/transparent.gif" style="width: 1em; height: 1em; border: 0;"/></a>
Zuletzt muß noch _admin/login.php die Nummer weitergeben.
Dafür nach der Zeile

Code: Alles auswählen

    <input type="hidden" name="rubric" value="<?php print(htmlspecialchars($_REQUEST['rubric'])); ?>">
noch die Zeile

Code: Alles auswählen

    <input type="hidden" name="nr" value="<?php print(htmlspecialchars($_REQUEST['nr'])); ?>">
einfügen.

Sieht gut aus! 8)


Hintergrund ist, daß dort "Profile" liegen, die User selbst bearbeiten können, aber eben nur die eigenen. Daher sollen sie dort direkt hingeleitet werden.
Dafür benutze ich die Variablenoption von mod_pages mit folgendem Eintrag:

Code: Alles auswählen

NurEigeneArtikel;0;select;nein,ja
Wenn nun bei einer Rubrik "ja" gewählt ist, dann können Redakteure und Chefredakteure nur ihre eigenen Artikel sehen und somit bearbeiten.
Dazu mußte ich nur noch in _admin/articles.php in

Code: Alles auswählen

    case 'list': // {{{
nach dem Block

Code: Alles auswählen

        $_q = "FROM ".CPO_NEWS." "
             ."WHERE artikel_archiv=0 "
             ."AND rubric_id='".addslashes($_SESSION['SID_rubric_id'])."' ";
noch das hier einfügen

Code: Alles auswählen

		// Einschränkung Rubrik auf eigene Artikel
		$uservars = unserialize($cpoRubrics[addslashes($cpoRubric['id'])]['_settings']);
		if ($uservars['NurEigeneArtikel'] == 'ja' && $_SESSION['SID_user']['admin']<=ROLE_CHIEFEDITOR)  $_q .= "AND autor ='".$_SESSION['SID_login']."' "; 
edit: login.php vergessen
Zuletzt geändert von MarkusR am 12.08.2009 14:53, insgesamt 1-mal geändert.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Damit man nicht doch über die im Template generierten Links an die fremden Artikel kommt, muß hier noch ein Riegel vorgeschoben werden.

Dazu im Block

Code: Alles auswählen

    case 'articles_modify': // {{{
den Abfrage-Code

Code: Alles auswählen

        $query = "SELECT nr, idx, auth, keywords, commentary, titel, templates_id, datum, verfallsdatum, pub_datum, autor, email, initial, freigabe, sort_id "
                ."FROM ".CPO_NEWS." "
                ."WHERE nr='".addslashes($_GET['nr'])."' ";

        $db = new DB;
        $db->query($query);
        $db->next_record();
ändern zu

Code: Alles auswählen

        $query = "SELECT nr, idx, auth, keywords, commentary, titel, templates_id, datum, verfallsdatum, pub_datum, autor, email, initial, freigabe, sort_id "
                ."FROM ".CPO_NEWS." "
                ."WHERE nr='".addslashes($_GET['nr'])."' ";

        // Einschränkung Rubrik auf eigene Artikel 
        $uservars = unserialize($cpoRubrics[addslashes($cpoRubric['id'])]['_settings']); 
        if ($uservars['NurEigeneArtikel'] == 'ja' && $_SESSION['SID_user']['admin']<=ROLE_CHIEFEDITOR)  $query .= "AND autor ='".$_SESSION['SID_login']."' "; 
        
        $db = new DB;
        $db->query($query);
        if ($db->num_rows()<1)  break; // Abbruch falls das kein eigener Artikel ist!
        $db->next_record();
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Noch ein merkwürdiges Verhalten:

Ich habe eine Rubrik "Intern".

Dort versucht sich nun ein Redakteur, der keine Rechte für diese Rubrik hat und sie auch nicht als Gruppenmitglied sehen darf, einzuloggen. Er wird abgewiesen (Formular erscheint erneut). Dennoch ist er eingeloggt und kann die Rubrik sehen, wenn er sie einfach über die Navigation aufruft.

Daß Redakteure alle Rubriken im Frontend sehen dürfen ist ja ok (wäre aber schöner wenn nicht), daß Ihnen aber gesagt wird "Du kommst hier nicht rein" obwohl sie schon drin sind und einfach nur weitergehen müssen ist etwas schräg... :?

Für meinen Teil kann ich es verkraften, da sie ohnehin Mitglied einer passenden Gruppe werden sollen (aber eben noch nicht sind). Besser wäre es aber wie gesagt, wenn man erst mit höheren Positionen alles sehen darf (z.B. ab Superuser).
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

MarkusR hat geschrieben: Weiterhin kann ein Redakteur, der kein Recht hat, einen Artikel zu erstellen, dennoch einen Artikel kopieren, dann bearbeiten und speichern... und somit einen Artikel anlegen. Das sollte nicht so sein!

Dann kann ein Redakteur, der kein Recht für den Upload besitzt, dennoch Dateien hochladen, wenn auch nur für alle Rubriken. Dann kann er es aber zur Bearbeitung aufrufen und der Rubrik zuweisen. Er kann es dann zwar nicht mehr in der Liste sehen, aber nun ist es in der Rubrik verfügbar.
Upload, Löschen und Verschieben sollten ihm ohne Rechte für einen Upload nicht möglich sein!
Ich habe jetzt folgendes angepasst, um bei fehlenden Rechten Artikeloperationen (Copy, Move, Delete) und jeglichen Dateiupload zu unterbinden.

In _include/basic_navigation.inc.php

Code: Alles auswählen

	$GLOBALS['navigation']['Files'][] = array(
		'caption'=>'upload files',
		'url'=>BASE_REL.'_admin/upload_files.php'
	);
	$GLOBALS['navigation']['Files'][] = array(
		'caption'=>'work on images',
		'url'=>BASE_REL.'_admin/manage_images.php'
	);
	$GLOBALS['navigation']['Files'][] = array(
		'caption'=>'work on files',
		'url'=>BASE_REL.'_admin/manage_files.php'
	);
ändern zu

Code: Alles auswählen

    if ($_SESSION['SID_stufe3'] || $_SESSION['SID_user']['admin']>ROLE_EDITOR) {
		$GLOBALS['navigation']['Files'][] = array(
			'caption'=>'upload files',
			'url'=>BASE_REL.'_admin/upload_files.php'
		);
		$GLOBALS['navigation']['Files'][] = array(
			'caption'=>'work on images',
			'url'=>BASE_REL.'_admin/manage_images.php'
		);
		$GLOBALS['navigation']['Files'][] = array(
			'caption'=>'work on files',
			'url'=>BASE_REL.'_admin/manage_files.php'
		);
	}
und in _admin/articles.php

Code: Alles auswählen

				// copy
				printIcon(
					BASE_REL.'_admin/articles.php?action=articles_copy&nr='.$db->v('nr'),
					SKIN_URL.'pic_copy.gif',
					__('copy article'),
					true
				);

				// move 
				if ($article_block) {
					printIcon(
						BASE_REL.'_admin/articles.php?action=articles_move&nr='.$db->v('nr'),
						SKIN_URL.'pic_move.gif',
						sprintf(__('Article is being edited by %s.'), htmlspecialchars($db_2->v('name'))),
						false
					);
				} else {
					// Allowed to access different rubric?
					$query = "SELECT COUNT(*) FROM ".CPO_PERMISSION." "
							."WHERE user_id=".$_SESSION['SID_user']['id']." "
							."AND stufe1=1 "
							."AND rubric_id!='".addslashes($_SESSION['SID_rubric_id'])."'";
					DEBUG(2, 'Is the user allowed to access a different rubric?<br /><br />'.$query, __FILE__, __LINE__);
					$db_2->query($query);
					$db_2->next_record();
					if ($db_2->v('COUNT(*)')>0) {
						printIcon(
							BASE_REL.'_admin/articles.php?action=articles_move&nr='.$db->v('nr'),
							SKIN_URL.'pic_move.gif',
							__('move article'),
							true
						);
					} else {
						printIcon(
							BASE_REL.'_admin/articles.php?action=articles_move&nr='.$db->v('nr'),
							SKIN_URL.'pic_move.gif',
							__('You only have access to this rubric.'),
							false
						);
					}
				}

				// delete article
				if ($article_block) {
					printIcon(
						BASE_REL.'_admin/articles.php?action=articles_delete&nr='.$db->v('nr'),
						SKIN_URL.'pic_del.gif',
						sprintf(__('Article is being edited by %s.'), htmlspecialchars($db_2->v('name'))),
						false
					);
				} else {
					printIcon(
						BASE_REL.'_admin/articles.php?action=articles_delete&nr='.$db->v('nr'),
						SKIN_URL.'pic_del.gif',
						__('delete article'),
						true
					);
				}
ändern zu

Code: Alles auswählen

				if ($_SESSION['SID_stufe1']==1 OR $_SESSION['SID_user']['admin']>ROLE_EDITOR)  { // by MarkusR: no copy, move delete if no creation rights!
					// copy
					printIcon(
						BASE_REL.'_admin/articles.php?action=articles_copy&nr='.$db->v('nr'),
						SKIN_URL.'pic_copy.gif',
						__('copy article'),
						true
					);

					// move 
					if ($article_block) {
						printIcon(
							BASE_REL.'_admin/articles.php?action=articles_move&nr='.$db->v('nr'),
							SKIN_URL.'pic_move.gif',
							sprintf(__('Article is being edited by %s.'), htmlspecialchars($db_2->v('name'))),
							false
						);
					} else {
						// Allowed to access different rubric?
						$query = "SELECT COUNT(*) FROM ".CPO_PERMISSION." "
								."WHERE user_id=".$_SESSION['SID_user']['id']." "
								."AND stufe1=1 "
								."AND rubric_id!='".addslashes($_SESSION['SID_rubric_id'])."'";
						DEBUG(2, 'Is the user allowed to access a different rubric?<br /><br />'.$query, __FILE__, __LINE__);
						$db_2->query($query);
						$db_2->next_record();
						if ($db_2->v('COUNT(*)')>0) {
							printIcon(
								BASE_REL.'_admin/articles.php?action=articles_move&nr='.$db->v('nr'),
								SKIN_URL.'pic_move.gif',
								__('move article'),
								true
							);
						} else {
							printIcon(
								BASE_REL.'_admin/articles.php?action=articles_move&nr='.$db->v('nr'),
								SKIN_URL.'pic_move.gif',
								__('You only have access to this rubric.'),
								false
							);
						}
					}

					// delete article
					if ($article_block) {
						printIcon(
							BASE_REL.'_admin/articles.php?action=articles_delete&nr='.$db->v('nr'),
							SKIN_URL.'pic_del.gif',
							sprintf(__('Article is being edited by %s.'), htmlspecialchars($db_2->v('name'))),
							false
						);
					} else {
						printIcon(
							BASE_REL.'_admin/articles.php?action=articles_delete&nr='.$db->v('nr'),
							SKIN_URL.'pic_del.gif',
							__('delete article'),
							true
						);
					}
				}
Jetzt hat der Redakteur die Rechte, die eingestellt sind. In meinem Fall nur "Bearbeiten" (kein Erstellen, kein Upload, keine Freigabe)
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Moin Markus,

ich habe hier für die Dateien einen anderen Weg eingeschlagen.

Bei Deinem Mechanismus kann er Dateien hochladen und für alle Rubriken verfügbar machen, wenn er in irgendeiner anderen Rubrik Upload-Rechte hat.

Ich habe den Code nach Deinem Hinweis hier so geändert, dass er zwar Dateien hochladen kann, diese aber nicht mehr der Rubrik zuordnen:

Dazu habe ich in der _includesite/i_image_change.php die Prüfung geändert in Zeile 143:

Code: Alles auswählen

if ($_SESSION['SID_rubric_id']!='' && ($_SESSION['SID_stufe3'] || $_SESSION['SID_user']['admin']>ROLE_EDITOR)) { 
Das ändert aber nichts daran, dass der Benutzer noch Dateien "in alle Rubriken" hochladen kann.

Hierzu müsste man im Grunde prüfen, ob der Redakteur überhaupt in irgendeiner Rubrik Upload-Rechte hat und nur dann den Datei-Upload freischalten.

Anschliessend stellte sich die Frage, ob die Upload-Rechte auch das bearbeiten / löschen von Dateien betreffen. Korrekt wäre es, wenn es hierzu eigenständige Rechte geben würde.

Ich habe hier mit meinen Kollegen gerade ein kurzes Brainstorming gemacht, um da zu einer Lösung zu kommen. Aber das Problem ist zu tief im ConPresso-Rechtesystem / Dateihandling verankert, als dass man da jetzt eine einfache Anpassung machen könnte.

Oder hast Du noch eine Idee?

Balu
PS: Artikel schaue ich mich gleich an
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich verstehe Eure Vorgehensweise, den Upload nur dort zu verbieten, wo es keine Rechte gibt.
Ich wiederum möchte es nur dort erlauben, wo es Recht gibt.

Die Erfahrung zeigt, daß der Server mit Massen von Bildern zugemüllt wird, die nicht mehr gelöscht werden. Klar, auch das könnte man als Redakteur lernen, aber eine Verwaltung durch jemanden, der ein Händchen für Bilder hat, ist mir lieber.
Viele Leute haben (vermutlich durch die allgegenwärtige Skalierung durch das Betriebssystem) Probleme zu erkennen, wie groß ein Bild denn nun wirklich ist. Alle werden gleich groß dargestellt. Erst mach dem Upload sieht man, ob es eine Briefmarke oder ein Poster war.
Nicht zuletzt durch die in 3.4.x noch vorhandene (aber ressourcenfressende) Anzeige, ob und wo ein Bild verwendet wird, die es jetzt nicht mehr gibt, werden häufig Bilder gelöscht, die eigentlich noch in Verwendung waren.

Daher ist es für mich sinnvoller, Redakteuren kein Upload-Recht einzuräumen. Wenn ich das dann doch tue, dann auch gerne für alle Rubriken...

Ich weiß ja, daß das Rechtesystem eine der nächsten großen Baustellen ist... :wink:
Diese Korrektur brauchte ich aber jetzt... :twisted:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten