Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Помогите разобраться с доступом

00 голосов
6
Есть групы пользователей имеющие доступ к закрытой страничке сайта, на которой размещены ссылки на скачивание файлов. Неавторизованный пользователь странички не видит, но по прямой ссылке на файл его можно скачать. В панели администратора ставил доступ к файлу только для груп пользователей - не помогло.
спросил 18 Окт, 13 от TeAr (120 баллов)

6 Ответы

00 голосов
Попробуйте не просто ставить обычные ссылки на скачивание а с помощью инфоблока, добавляя свойство "файл", и туда загрузив по файлу или больше, и к этому инфоблоку даете права кто может его читать и размещаете на страницу.
ответил 10 Ноя, 13 от Muzdie (300 баллов)
00 голосов
Идею не совсем понял. У меня есть просто страничка РНР на которую есть ссылки на файлы. Группы пользователей страничку не видят, но файлы можно скачать по прямой ссылке.
ответил 16 Фев, 14 от TeAr (120 баллов)
00 голосов
Busted просто имел в виду, что если ссылки на файлы хранить в таблице базы данных (инфоблоке), то можно выставить права доступа на этот инфоблок. т.е. прав достаточных нет, и инфоблок с ссылками на файл не отображается.
А еще в админ-контент-структура сайта тоже права на доступ к папкам можно выставлять. Поставить запрет на папку где хранятся файлы для неавториз. пользователей
ответил 07 Июнь, 14 от megapihar (100 баллов)
00 голосов
Для данной задачи нужно использовать контролируемое скачивание.Если давать прямую ссылку на файл, то ядро Битрикс не подключается и нет возможности у сайта проверить права доступа.
В демо установке БУСа есть пример реализации.
P.S. гугл выдает хорошие результаты по этому запросу
ответил 05 Окт, 14 от Almarea (3,760 баллов)
00 голосов
Спасибо большое. А можно ли сделать так чтобы для контролируемого скачивания была другая директория, я пробовал менять имя директории в файле но ничего не получилось.Вот текст исходного файла download_private.php

Код
<? 
$sCurUrl = urldecode($_SERVER["REQUEST_URI"]); 
$sCurUrl = str_r eplace("\0", "", $sCurUrl); 
$sCurUrl = ereg_r eplace("[\\/]+", "/", $sCurUrl); 
$sCurUrl = ereg_r eplace("\.+[\\/]", "", $sCurUrl); 

if($p = strpos($sCurUrl, "?")) 
{ 
    $sParams = substr($sCurUrl, $p+1); 
    parse_str($sParams, $arParams); 
    $GLOBALS += $arParams; 
    $_GET = $arParams; 
    $HTTP_GET_VARS = $_GET; 
    $_REQUEST += $arParams; 
    $sCurUrl = substr($sCurUrl, 0, $p); 
} 

$DIR = dirname($sCurUrl); 
$file = substr($sCurUrl, strlen($DIR)+1); 
$filename = $_SERVER["DOCUMENT_ROOT"].$DIR."/files/".$file; 

if(file_exists($filename) && is_file($filename)) 
{ 
    require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 
    @set_time_limit(0); 
    $FILE_PERM = $APPLICATION->GetFileAccessPermission($DIR."/files/".$file, $USER->GetUserGroupArray()); 
    $FILE_PERM = (strlen($FILE_PERM)>0 ? $FILE_PERM : "D"); 
    if($FILE_PERM<"R") 
     LocalRedirect($DIR."/auth.php?fname=".urlencode($file)."&DIR=".urlencode($DIR)); 
    else 
    { 
     $filesize = filesize($filename); 
     $f = fopen($filename, "rb"); 
     $cur_pos = 0; 
     $size = $filesize-1; 

     $sapi = php_sapi_name(); 
     if($_SERVER["REQUEST_METHOD"]=="HEAD") 
     { 
      if($sapi=="cgi") 
          header("Status: 200 OK"); 
      else 
          header("HTTP/1.1 200 OK"); 
      header("Accept-Ranges: bytes"); 
      header("Content-Length: ".$filesize); 
      header("Content-Type: application/force-download; name=\"".$file."\""); 
      header("Last-Modified: ".date("r",filemtime($filename))); 
     } 
     else 
     { 
      $p = strpos($_SERVER["HTTP_RANGE"], "="); 
      if(intval($p)>0) 
      { 
          $bytes = substr($_SERVER["HTTP_RANGE"], $p+1); 
          $p = strpos($bytes, "-"); 
          if($p!==false) 
          { 
           $cur_pos = IntVal(substr($bytes, 0, $p)); 
           $size = IntVal(substr($bytes, $p+1)); 
           if($size<=0) 
            $size = $filesize - 1; 
           if($cur_pos>$size) 
           { 
            $cur_pos = 0; 
            $size = $filesize - 1; 
           } 
           fseek($f, $cur_pos); 
          } 
      } 

      if(intval($cur_pos)>0) 
      { 
          if($sapi=="cgi") 
           header("Status: 206 Partial Content"); 
          else 
           header("HTTP/1.1 206 Partial Content"); 
      } 
      else 
      { 
          session_cache_limiter(''); 
          session_start(); 
          if(CModule::IncludeModule("statistic") && intval($_SESSION["SESS_SEARCHER_ID"]) <= 0) 
          { 
           if(strlen($event1)<=0 && strlen($event2)<=0) 
           { 
            $event1 = "download"; 
            $event2 = "private"; 
            $event3 = $file; 
           } 
           $e = $event1."/".$event2."/".$event3; 
           if(!in_array($e, $_SESSION["DOWNLOAD_EVENTS"])) // проверим не скачивался ли в данной сессии 
           { 
            $w = CStatEvent::GetByEvents($event1, $event2); 
            $wr = $w->Fetch(); 
            $z = CStatEvent::GetEventsByGuest($_SESSION["SESS_GUEST_ID"], $wr["EVENT_ID"], $event3, 21600); 
            if(!($zr=$z->Fetch())) // проверим не скачивал ли посетитель за последние 6 часов 
            { 
                CStatistic::Set_Event($event1, $event2, $event3); 
                $_SESSION["DOWNLOAD_EVENTS"][] = $e; 
            } 
           } 
          } 
          ob_end_clean(); 
          session_write_close(); 
          if ($sapi=="cgi") 
           header("Status: 200 OK"); 
          else 
           header("HTTP/1.1 200 OK"); 
      } 

      header("Content-Type: application/force-download; name=\"".$file."\""); 
      header("Content-Transfer-Encoding: binary"); 
      header("Content-Length: ".($size-$cur_pos+1)); 
      header("Accept-Ranges: byt
ответил 06 Фев, 15 от TeAr (120 баллов)
00 голосов
Можно сделать что и как угодно.
ответил 19 Май, 15 от Almarea (3,760 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 05 Март, 14 от Soulmir (100 баллов)
0 голосов
2 ответов
0 голосов
4 ответов
0 голосов
0 ответов
спросил 05 Окт, 13 от Scabres (220 баллов)
0 голосов
3 ответов
спросил 02 Окт, 13 от FarAway (340 баллов)