Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

fileshare modul usern das löschen verbieten

Eingetragen von Anonymous (0)
am 20.03.2007 - 16:53 Uhr in
  • Module

Hi,

Ich versuche gerade den Usern das Löschen von upgeloadeten Conentnt zu verbieten. Leider gibt es dazu in der Access Controll keine passende chekbox. Und ich kann auch leider nicht gut genug php coden um dies in der fileshare.module datei umzuschreiben.

deshalb würde ich euch bitten mir zu helfen

MfG
don durito

‹ TinyMCE - neue styles anlegen, bzw alte ersetzen E-Mail ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich glaube...

Eingetragen von dondurito (nicht überprüft) (0)
am 20.03.2007 - 18:34 Uhr

Das hier die passende passage liegt:


* Handles the delete file request by submitDelete in fileshare.js
*/
function _fsform_validate($form_id, $form_values) {
  global $user;
  $node = node_load($form_values['nid']);
  // ensure that you are only deleting files from the file directory and build path from node
  $deletefile = $node->_basepath.$node->_filepath.trim(str_replace('../', '', $form_values['deletefile']),".");
  // checks user access and confirms that the delete string is within the root, but is not the root itself
  if ((substr($form_values['deletefile'],0,1) == '/' && strlen($form_values['deletefile']) > 2) && (user_access('modify files') || (user_access('manage own fileshares') && ($user->uid == $node->uid)))) {
    if (file_check_directory($deletefile)) {
      if (_recursive_rmdir($deletefile)) {
        drupal_set_message('The folder and it\'s contents: <strong>"'.basename($deletefile).'"</strong> has been deleted.');
        watchdog('fileshare', check_plain($deletefile." and it's contents were deleted from ".$node->title), WATCHDOG_NOTICE, l(t('view'), 'node/'.$node->nid));
      } else {
        drupal_set_message('The folder: <strong>"'.basename($deletefile).'"</strong> could not be deleted.','error');
        return FALSE;
      }
    } else {
      if (file_delete($deletefile)) {
        drupal_set_message('The file: <strong>"'.basename($deletefile).'"</strong> has been deleted.');
        watchdog('fileshare', check_plain($deletefile.' was deleted from '.$node->title), WATCHDOG_NOTICE, l(t('view'), 'node/'.$node->nid));
      } else {
        drupal_set_message('The file: <strong>"'.$deletefile.'"</strong> could not be deleted.','error');
        return FALSE;
      }
    }
  } else {
    drupal_set_message('You are not authorized to remove: <strong>"'.$deletefile.'"</strong>.','error');
  }
}

Doch wo und wie muss ich jetzt eine if anweisung schreiben?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nicht ganz. Dieser Code wird

Eingetragen von elias (72)
am 20.03.2007 - 23:02 Uhr

Nicht ganz. Dieser Code wird erst beim Senden des Formulars aufgerufen.

Den entsprechenden Code mit (wieder ungetesteten) Anpassungen findest du hier:

<?php
/**
* RECURSIVE READ DIRECTORY
* for AJAX file browsing
* Called by _fsform()
*/
function _fileshare_handler($node) {
  global
$user;
 
// ensure that users are not able to ascend the file tree with relitive paths
 
isset($_GET['dir']) ? $dir = trim(str_replace('../', '', $_GET['dir']),".") : $dir = '';
  isset(
$_GET['pre']) ? $pre = check_plain($_GET['pre']) : $pre = '';
 
$modify     = _tf($node->_modify) && (user_access('modify files') || ( user_access('manage own fileshares') && ($user->uid == $node->uid)));
 
$download   = (user_access('download files') || ( user_access('manage own fileshares') && ($user->uid == $node->uid)));
 
$tag        = 'a';
 
$output     = '';
 
// Read files in a directory
 
$handle = opendir($node->_basepath.$node->_filepath.$dir);
  while (
false !== ($fileget = readdir($handle))) { // read directory
   
$file[] = $fileget; // create file array
 
}
 
sort($file);  // sort directory array
 
for ($x=0; $x <= (count($file) -1); $x++) { // loop through rows of array
   
if (substr($file[$x], 0, 1) != "." && $file[$x] != '_previews') {
      if (
is_dir($node->_basepath.$node->_filepath.$dir.'/'.$file[$x])) {
       
$output .= '<div class="fs_row">'."\n";
       
$output .= '<div class="fs_data">'."\n";
         
# alter code: if ($modify) {
       
if ($modify && (user_access('delete')) {
           
# Hier wird der Link zum Loeschen von Ordnern ausgegeben
         
$output .= '<a href="/javascript:submitDelete(\''
           
.$dir.'/'.$file[$x].'\');" alt="delete file" class="fs_delete">'
           
."&nbsp;</a>\n";
        }
       
$output .= "</div>\n";
       
$output .= '<a href="/javascript:;" onclick="fileshare_folder(this,\''.$pre.$tag.'\');" ';
       
$output .= 'alt="'.$node->_basepath.$node->_filepath.$dir.'/'.$file[$x].'" ';
       
$output .= 'name="'.url('fileshare/handler/'.$node->nid
         
,'dir='.$dir.'/'.$file[$x]
          .
'&pre='.$pre.$tag).'" ';
       
$output .= 'class="fs_closed">'."\n";
       
$output .= $file[$x];
       
$output .= "</a>\n";
       
$output .= "</div>\n";
       
$output .= '<div class="fs_nest" id="'.$pre.$tag.'"></div>'."\n";
        ++
$tag;
      } else {
       
$output .= '<div class="fs_row">'."\n";
       
$output .= '<div class="fs_data">'."\n";
       
$output .= '<b>'.date("j/n/y",filemtime($node->_basepath.$node->_filepath.$dir.'/'.$file[$x])).'</b>';
       
$output .= '<i>'._resize_bytes(filesize($node->_basepath.$node->_filepath.$dir.'/'.$file[$x])).'</i>';
         
// allow deletion if modify was checked and access permissions are met
          # alter code: if ($modify) {
       
if ($modify && (user_access('delete')) {
           
# Hier wird der Link zum Loeschen von Dateien ausgegeben
         
$output .= '<a href="/javascript:submitDelete(\''
           
.$dir.'/'.$file[$x].'\');" alt="delete file" class="fs_delete">'
           
."&nbsp;</a>\n";
        }
       
$output .= "</div>\n";
      if (
$download) {
          if (
$node->_method) {
           
$output .= '<a href="/'.url('fileshare/files/'.$node->nid.$dir.'/'.$file[$x]).'" class="fs_file">'."\n"; // _method is private
         
} else {
           
$output .= '<a href="/'.base_path().$node->_basepath.$node->_filepath.$dir.'/'.$file[$x].'" class="fs_file">'."\n"; // _method is public
         
}
        } else {
         
$output .= '<div class="fs_file">';
        }
        if (
_tf($node->_thumbs) == 1) { // check to for display of image previews (1 == true)
         
$preview = $node->_basepath.$node->_filepath.'/_previews/'.substr($file[$x],0,-3);
         
$exts = array('jpg','gif');
          foreach (
$exts as $ext) {
            if (
file_exists($preview.$ext)) { // check to see if preview file is there
             
$output .= '<img src="/'.base_path().$preview.$ext.'" border="0" align="absmiddle">'."\n";
            }
          }
        }
       
$output .= $file[$x];
        if (
$download) { $output .= "</a>\n"; } else { $output .= "</div>\n"; }
       
$output .= '</div>'."\n";
      }
    }
  }
 
closedir($handle);
  if (
$output == '') { // Safari needs some output returned to the jahHandler
   
echo "&nbsp;";
  } else {
    echo
$output;
  }
}
?>

Zusätzlich musst den hook_perm nochmals erweitern:

<?php
/**
* Implementation of hook_perm().
*
* Since we are limiting the ability to create new nodes to certain users,
* we need to define what those permissions are here. We also define a permission
* to allow users to edit the nodes they created.
*/
function fileshare_perm() {
  return array(
'create fileshares'
   
,'set file paths'
   
,'modify files'
   
,'download files'
   
,'manage own fileshares'
   
,'create directories'
   
,'delete'
 
);
}
?>

Gruss Elias

  • Anmelden oder Registrieren um Kommentare zu schreiben

Leider

Eingetragen von dondurito (nicht überprüft) (0)
am 21.03.2007 - 00:17 Uhr

Leider funktioniert es nicht obwohl ich beide $modify teile bearbeite habe, bekommen ich immer die Fehlermeldung das die { falsch ist. doch das sehe sogar ich mit meinen laienhaften programmier kenntnissen das das nicht stimmen kann.
Ich habe zuvor schon meine genannte Code Pasage bearbeitet und das downloaden ist nun verboten. Doch wie du schon geschrieben ist der Button zum downloaden noch immer da. Den würde ich aber gerne verschwienden lasse.

MfG
don durito

p.s.: vielen dank fuer deine wunderbare hilfe

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich dachte, du willst den

Eingetragen von elias (72)
am 21.03.2007 - 07:24 Uhr

Ich dachte, du willst den Button zum Löschen (und nicht zum downloaden) verschwinden lassen?

Aber du hast Recht: der erste Code hat einen Fehler. In der Eile habe ich eine Klammer zuviel geschrieben, die nicht geschlossen wird. Daher der Error.

Hier der korrekte Code: (Habs diesmal sogar rasch erfolgreich getestet ;-)

<?php
/**
* RECURSIVE READ DIRECTORY
* for AJAX file browsing
* Called by _fsform()
*/
function _fileshare_handler($node) {
  global
$user;
 
// ensure that users are not able to ascend the file tree with relitive paths
 
isset($_GET['dir']) ? $dir = trim(str_replace('../', '', $_GET['dir']),".") : $dir = '';
  isset(
$_GET['pre']) ? $pre = check_plain($_GET['pre']) : $pre = '';
 
$modify     = _tf($node->_modify) && (user_access('modify files') || ( user_access('manage own fileshares') && ($user->uid == $node->uid)));
 
$download   = (user_access('download files') || ( user_access('manage own fileshares') && ($user->uid == $node->uid)));
 
$tag        = 'a';
 
$output     = '';
 
// Read files in a directory
 
$handle = opendir($node->_basepath.$node->_filepath.$dir);
  while (
false !== ($fileget = readdir($handle))) { // read directory
   
$file[] = $fileget; // create file array
 
}
 
sort($file);  // sort directory array
 
for ($x=0; $x <= (count($file) -1); $x++) { // loop through rows of array
   
if (substr($file[$x], 0, 1) != "." && $file[$x] != '_previews') {
      if (
is_dir($node->_basepath.$node->_filepath.$dir.'/'.$file[$x])) {
       
$output .= '<div class="fs_row">'."\n";
       
$output .= '<div class="fs_data">'."\n";
         
# alter code: if ($modify) {
       
if ($modify && user_access('delete')) {
           
# Hier wird der Link zum Loeschen von Ordnern ausgegeben
         
$output .= '<a href="/javascript:submitDelete(\''
           
.$dir.'/'.$file[$x].'\');" alt="delete file" class="fs_delete">'
           
."&nbsp;</a>\n";
        }
       
$output .= "</div>\n";
       
$output .= '<a href="/javascript:;" onclick="fileshare_folder(this,\''.$pre.$tag.'\');" ';
       
$output .= 'alt="'.$node->_basepath.$node->_filepath.$dir.'/'.$file[$x].'" ';
       
$output .= 'name="'.url('fileshare/handler/'.$node->nid
         
,'dir='.$dir.'/'.$file[$x]
          .
'&pre='.$pre.$tag).'" ';
       
$output .= 'class="fs_closed">'."\n";
       
$output .= $file[$x];
       
$output .= "</a>\n";
       
$output .= "</div>\n";
       
$output .= '<div class="fs_nest" id="'.$pre.$tag.'"></div>'."\n";
        ++
$tag;
      } else {
       
$output .= '<div class="fs_row">'."\n";
       
$output .= '<div class="fs_data">'."\n";
       
$output .= '<b>'.date("j/n/y",filemtime($node->_basepath.$node->_filepath.$dir.'/'.$file[$x])).'</b>';
       
$output .= '<i>'._resize_bytes(filesize($node->_basepath.$node->_filepath.$dir.'/'.$file[$x])).'</i>';
         
// allow deletion if modify was checked and access permissions are met
          # alter code: if ($modify) {
       
if ($modify && user_access('delete')) {
           
# Hier wird der Link zum Loeschen von Dateien ausgegeben
         
$output .= '<a href="/javascript:submitDelete(\''
           
.$dir.'/'.$file[$x].'\');" alt="delete file" class="fs_delete">'
           
."&nbsp;</a>\n";
        }
       
$output .= "</div>\n";
      if (
$download) {
          if (
$node->_method) {
           
$output .= '<a href="/'.url('fileshare/files/'.$node->nid.$dir.'/'.$file[$x]).'" class="fs_file">'."\n"; // _method is private
         
} else {
           
$output .= '<a href="/'.base_path().$node->_basepath.$node->_filepath.$dir.'/'.$file[$x].'" class="fs_file">'."\n"; // _method is public
         
}
        } else {
         
$output .= '<div class="fs_file">';
        }
        if (
_tf($node->_thumbs) == 1) { // check to for display of image previews (1 == true)
         
$preview = $node->_basepath.$node->_filepath.'/_previews/'.substr($file[$x],0,-3);
         
$exts = array('jpg','gif');
          foreach (
$exts as $ext) {
            if (
file_exists($preview.$ext)) { // check to see if preview file is there
             
$output .= '<img src="/'.base_path().$preview.$ext.'" border="0" align="absmiddle">'."\n";
            }
          }
        }
       
$output .= $file[$x];
        if (
$download) { $output .= "</a>\n"; } else { $output .= "</div>\n"; }
       
$output .= '</div>'."\n";
      }
    }
  }
 
closedir($handle);
  if (
$output == '') { // Safari needs some output returned to the jahHandler
   
echo "&nbsp;";
  } else {
    echo
$output;
  }
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke

Eingetragen von dondurito (nicht überprüft) (0)
am 21.03.2007 - 14:06 Uhr

Du hast meine Frage schon richtig verstanden. Ich wollte es den anonymen Usern verbieten Content zu löschen.
Außerdem hat deine Anleitung wieder einmal super funktioniert, und sie war so grandios erklärt wie die erste.

Danke, Danke, Danke du Schatz ;-)

baba
don durito

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich hatte das gleiche

Eingetragen von CIP-SG (33)
am 17.09.2007 - 14:14 Uhr

Ich hatte das gleiche Problem und habe nun auch diesen Code verwendet. Die Buttons zum Löschen sind zwar jetzt weg, allerdings kann man auch die Ordner nicht mehr öffnen. Es erscheint immer: The requested URL /javascript:; was not found on this server. Ich habe den Code im fileshare.module ersetzt, hätte ich was anderes machen sollen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Button der direkt eine Mail verschickt
  • [gelöst]felder in view zusammenführen
  • Web Inspektor in safari
  • D6 Views Data Export Multi Images -> D7
  • CORS Einstellungen scheinen nicht zu greifen - Was muss ich ändern?
  • Fehlermeldung
  • [gelöst]Composer Grundsatzfrage
  • feld-inhalt aus userprofil in node ziehen
  • [gelöst]Hilfe!!! Fehlermeldung und ich weiß nicht weiter
  • Google fonts local
  • Freelancer gesucht
  • In Views Filter mit Dropdown oder select filter
Weiter

Neue Kommentare

  • Ich habe mir einen Weg
    vor 22 Stunden 59 Minuten
  • Also ich konnte schon mal
    vor 3 Tagen 3 Stunden
  • Ja aber ich kann in dem Feld
    vor 3 Tagen 4 Stunden
  • Du darfst nicht diese 2
    vor 3 Tagen 7 Stunden
  • hat denn wirklich keiner eine
    vor 3 Tagen 18 Stunden
  • Ist doch kacki :/ und viel zu
    vor 4 Tagen 2 Stunden
  • falscher ansatz oder denkfehler
    vor 4 Tagen 2 Stunden
  • Wow danke für deine ausführlöiche Beschreibung
    vor 4 Tagen 4 Stunden
  • Zur Frage 2
    vor 4 Tagen 5 Stunden
  • Frage zum selben Feld verwenden
    vor 4 Tagen 5 Stunden

Statistik

Beiträge im Forum: 248535
Registrierte User: 19783

Neue User:

  • Andreas0815
  • Btinrusable
  • juli_91

» Alle User anzeigen

User nach Punkten sortiert:
wla9304
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 1 Benutzer und 2 Gäste online.

Benutzer online

  • wla

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association