Ejemplo n.º 1
0
            $createTableQuery = "CREATE TABLE `{$requestPayload['table_name']}` (\n            id int(11) unsigned NOT NULL AUTO_INCREMENT,\n            `{$statusColumnName}` tinyint(1) unsigned DEFAULT NULL,\n            PRIMARY KEY(id)\n        );";
            $ZendDb->query($createTableQuery, $ZendDb::QUERY_MODE_EXECUTE);
        } catch (\Exception $e) {
        }
    }
    $privileges = new DirectusPrivilegesTableGateway($acl, $ZendDb);
    $response = $privileges->insertPrivilege($requestPayload);
    return JsonView::render($response);
})->via('POST');
$app->map("/{$v}/privileges/:groupId/:privilegeId", function ($groupId, $privilegeId) use($acl, $ZendDb, $params, $requestPayload, $app) {
    $currentUser = Auth::getUserRecord();
    $myGroupId = $currentUser['group'];
    if ($myGroupId != 1) {
        throw new Exception('Permission denied');
    }
    $privileges = new DirectusPrivilegesTableGateway($acl, $ZendDb);
    if (isset($requestPayload['activeState'])) {
        if ($requestPayload['activeState'] !== 'all') {
            $priv = $privileges->findByStatus($requestPayload['table_name'], $requestPayload['group_id'], $requestPayload['activeState']);
            if ($priv) {
                $requestPayload['id'] = $priv['id'];
                $requestPayload['status_id'] = $priv['status_id'];
            } else {
                unset($requestPayload['id']);
                $requestPayload['status_id'] = $requestPayload['activeState'];
                $response = $privileges->insertPrivilege($requestPayload);
                return JsonView::render($response);
            }
        }
    }
    $response = $privileges->updatePrivilege($requestPayload);
Ejemplo n.º 2
0
 /**
  * Get Hook Emitter
  *
  * @return Emitter
  */
 private static function hookEmitter()
 {
     $emitter = new Emitter();
     $emitter->addAction('application.error', function ($e) {
         $log = Bootstrap::get('log');
         $log->error($e);
     });
     $emitter->addAction('table.insert.directus_groups', function ($data) {
         $acl = Bootstrap::get('acl');
         $zendDb = Bootstrap::get('zendDb');
         $privilegesTable = new DirectusPrivilegesTableGateway($acl, $zendDb);
         $privilegesTable->insertPrivilege(['group_id' => $data['id'], 'allow_view' => 1, 'allow_add' => 0, 'allow_edit' => 1, 'allow_delete' => 0, 'allow_alter' => 0, 'table_name' => 'directus_users', 'read_field_blacklist' => 'token', 'write_field_blacklist' => 'group,token']);
     });
     return $emitter;
 }
Ejemplo n.º 3
0
function getPrivileges($groupId)
{
    global $ZendDb, $acl;
    $tableGateway = new DirectusPrivilegesTableGateway($acl, $ZendDb);
    return $tableGateway->fetchGroupPrivilegesRaw($groupId);
}
Ejemplo n.º 4
0
 /**
  * Get Hook Emitter
  *
  * @return Emitter
  */
 private static function hookEmitter()
 {
     $emitter = new Emitter();
     $emitter->addAction('application.error', function ($e) {
         $log = Bootstrap::get('log');
         $log->error($e);
     });
     $emitter->addAction('table.insert.directus_groups', function ($data) {
         $acl = Bootstrap::get('acl');
         $zendDb = Bootstrap::get('zendDb');
         $privilegesTable = new DirectusPrivilegesTableGateway($acl, $zendDb);
         $privilegesTable->insertPrivilege(['group_id' => $data['id'], 'allow_view' => 1, 'allow_add' => 0, 'allow_edit' => 1, 'allow_delete' => 0, 'allow_alter' => 0, 'table_name' => 'directus_users', 'read_field_blacklist' => 'token', 'write_field_blacklist' => 'group,token']);
     });
     $emitter->addFilter('table.insert:before', function ($tableName, $data) {
         if ($tableName == 'directus_files') {
             unset($data['data']);
             $data['user'] = AuthProvider::getUserInfo('id');
         }
         return $data;
     });
     // Add file url and thumb url
     $emitter->addFilter('table.select', function ($result, $selectState) {
         if ($selectState['table'] == 'directus_files') {
             $fileRows = $result->toArray();
             $files = new \Directus\Files\Files();
             foreach ($fileRows as &$row) {
                 $config = Bootstrap::get('config');
                 $fileURL = $config['filesystem']['root_url'];
                 $thumbnailURL = $config['filesystem']['root_thumb_url'];
                 $thumbnailFilenameParts = explode('.', $row['name']);
                 $thumbnailExtension = array_pop($thumbnailFilenameParts);
                 $row['url'] = $fileURL . '/' . $row['name'];
                 if (in_array($thumbnailExtension, ['tif', 'tiff', 'psd', 'pdf'])) {
                     $thumbnailExtension = 'jpg';
                 }
                 $thumbnailFilename = $row['id'] . '.' . $thumbnailExtension;
                 $row['thumbnail_url'] = $thumbnailURL . '/' . $thumbnailFilename;
                 // filename-ext-100-100-true.jpg
                 // @TODO: This should be another hook listener
                 $row['thumbnail_url'] = null;
                 $filename = implode('.', $thumbnailFilenameParts);
                 if ($row['type'] == 'embed/vimeo') {
                     $oldThumbnailFilename = $row['name'] . '-vimeo-220-124-true.jpg';
                 } else {
                     $oldThumbnailFilename = $filename . '-' . $thumbnailExtension . '-160-160-true.jpg';
                 }
                 // 314551321-vimeo-220-124-true.jpg
                 // hotfix: there's not thumbnail for this file
                 if ($files->exists('thumbs/' . $oldThumbnailFilename)) {
                     $row['thumbnail_url'] = $thumbnailURL . '/' . $oldThumbnailFilename;
                 }
                 if ($files->exists('thumbs/' . $thumbnailFilename)) {
                     $row['thumbnail_url'] = $thumbnailURL . '/' . $thumbnailFilename;
                 }
                 $embedManager = Bootstrap::get('embedManager');
                 $provider = $embedManager->getByType($row['type']);
                 $row['html'] = null;
                 if ($provider) {
                     $row['html'] = $provider->getCode($row);
                 }
             }
             $filesArrayObject = new \ArrayObject($fileRows);
             $result->initialize($filesArrayObject->getIterator());
         }
         return $result;
     });
     return $emitter;
 }
Ejemplo n.º 5
0
 /**
  * Construct Acl provider
  * @return \Directus\Acl
  */
 private static function acl()
 {
     $acl = new acl();
     $db = self::get('ZendDb');
     $DirectusTablesTableGateway = new DirectusTablesTableGateway($acl, $db);
     $getTables = function () use($DirectusTablesTableGateway) {
         return $DirectusTablesTableGateway->select()->toArray();
     };
     $tableRecords = $DirectusTablesTableGateway->memcache->getOrCache(MemcacheProvider::getKeyDirectusTables(), $getTables, 1800);
     $magicOwnerColumnsByTable = array();
     foreach ($tableRecords as $tableRecord) {
         if (!empty($tableRecord['user_create_column'])) {
             $magicOwnerColumnsByTable[$tableRecord['table_name']] = $tableRecord['user_create_column'];
         }
     }
     $acl::$cms_owner_columns_by_table = $magicOwnerColumnsByTable;
     if (AuthProvider::loggedIn()) {
         $currentUser = AuthProvider::getUserInfo();
         $Users = new DirectusUsersTableGateway($acl, $db);
         $cacheFn = function () use($currentUser, $Users) {
             return $Users->find($currentUser['id']);
         };
         $cacheKey = MemcacheProvider::getKeyDirectusUserFind($currentUser['id']);
         $currentUser = $Users->memcache->getOrCache($cacheKey, $cacheFn, 10800);
         if ($currentUser) {
             $Privileges = new DirectusPrivilegesTableGateway($acl, $db);
             $getPrivileges = function () use($currentUser, $Privileges) {
                 return (array) $Privileges->fetchGroupPrivileges($currentUser['group']);
             };
             $groupPrivileges = $Privileges->memcache->getOrCache(MemcacheProvider::getKeyDirectusGroupPrivileges($currentUser['group']), $getPrivileges, 1800);
             $acl->setGroupPrivileges($groupPrivileges);
         }
     }
     return $acl;
 }