10.1.2. Resources

Универсальные наборы прав доступа

class nextgisweb.resource.scope.ResourceScope[исходный код]

Базовый набор прав ресурса

read = <Permission „read“ in scope „resource“>

Чтение: возможность прочитать атрибуты класс, наименование и ключ ресурса. Так же от этого права зависит большинство других прав ресурса, например изменение, таким образом нельзя изменить ресурс не имея возможности его прочитать.

create = <Permission „create“ in scope „resource“>

Создание: довольно туманное право, сейчас не используется. Идея была в том, что при создании нового ресурса проверялось наличие в нем права на создание, но сейчас проверяется только право manage_children для дочернего ресурса. Возможно потом стоит к этому вернуться, без этого права невозможно ограничить создание новых ресурсов определенного типа.

update = <Permission „update“ in scope „resource“>

Изменение: изменение наименования и ключа ресурса, по аналогии с правом read. На изменение остальных атрибутов это ни как не влияет.

delete = <Permission „delete“ in scope „resource“>

Удаление: право на удаление этого ресурса. Помимо этого для реального удаления ресурса необходимо наличие права manage_children у родительского ресурса.

manage_children = <Permission „manage_children“ in scope „resource“>

Управление дочерними ресурсами

change_permissions = <Permission „change_permissions“ in scope „resource“>

Управление правами доступа

class nextgisweb.resource.scope.MetadataScope[исходный код]

Набор прав метаданных ресурса. Типичный пример метаданных ресурса - его описание в свободной форме. Это описание фактически ни на что не влияет, его изменение не приводит к изменению структуры данных или чего-либо еще. Поскольку у каждого типа ресурсов есть описание, то этот набор прав включен для всех ресурсов на уровне класса Resource.

read = <Permission „read“ in scope „metadata“>

Чтение

write = <Permission „write“ in scope „metadata“>

Запись

class nextgisweb.resource.scope.DataStructureScope[исходный код]

Набор прав структуры данных ресурса, например стурктура полей векторного слоя, ее изменение может приводить к изменению содержимого самих данных.

read = <Permission „read“ in scope „datastruct“>

Чтение

write = <Permission „write“ in scope „datastruct“>

Запись

class nextgisweb.resource.scope.DataScope[исходный код]

Набор прав доступа к данным

read = <Permission „read“ in scope „data“>

Чтение

write = <Permission „write“ in scope „data“>

Запись

class nextgisweb.resource.scope.ConnectionScope[исходный код]

Набор прав параметров внешнего соединения. В некоторых случаях требуется хранить в ресурсе параметры доступа к внешним ресурсам. Эти параметры могут содержать чувствительные данные с точки зрения безопасности, например логины и пароли для доступа к удаленной БД.

class nextgisweb.resource.scope.ServiceScope[исходный код]

Набор прав предоставляемого сервиса, например WMS или WFS. Нужна чтобы можно было разделить права на настройку сервиса и на его использование. Впрочем если сервис внутри использует другие ресурсы, то права на них должны проверяться отдельно.

connect = <Permission „connect“ in scope „service“>

Подключение

configure = <Permission „configure“ in scope „service“>

Настройка

Resources (cls) can be:

  • resource_group
  • postgis_layer
  • wmsserver_service
  • baselayers
  • postgis_connection
  • webmap
  • wfsserver_service
  • vector_layer
  • raster_layer
  • vector_style
  • raster_style
  • file_bucket
  • lookup_table

HTTP API

Schema request

При запросе схемы получается состав поддерживаемых типов ресурсов и их характеристики и другие метаданные.

GET /resource/schema

Проверка состава ресурсов.

Примечание

Для запросов REST API в заголовке HTTP запроса должны быть обязательно прописано: Accept: */*

Example request:

GET /resource/schema HTTP/1.1
Host: ngw_url
Accept: */*

Example JSON response:

{
  "resources": {
    "mapserver_style": {
      "identity": "mapserver_style",
      "label": "\u0421\u0442\u0438\u043b\u044c MapServer",
      "scopes": [
        "resource",
        "data",
        "metadata"
      ]
    },
    "postgis_connection": {
      "identity": "postgis_connection",
      "label": "\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435
               PostGIS",
      "scopes": [
        "connection",
        "resource",
        "metadata"
      ]
    },
    "postgis_layer": {
      "identity": "postgis_layer",
      "label": "\u0421\u043b\u043e\u0439 PostGIS",
      "scopes": [
        "resource",
        "datastruct",
        "data",
        "metadata"
      ]
    },
    "raster_layer": {
      "identity": "raster_layer",
      "label": "\u0420\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0439
                \u0441\u043b\u043e\u0439",
      "scopes": [
        "resource",
        "datastruct",
        "data",
        "metadata"
      ]
    },
    "raster_style": {
      "identity": "raster_style",
      "label": "\u0420\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0439
                \u0441\u0442\u0438\u043b\u044c",
      "scopes": [
        "resource",
        "data",
        "metadata"
      ]
    },
    "resource": {
      "identity": "resource",
      "label": "\u0420\u0435\u0441\u0443\u0440\u0441",
      "scopes": [
        "resource",
        "metadata"
      ]
    },
    "resource_group": {
      "identity": "resource_group",
      "label": "\u0413\u0440\u0443\u043f\u043f\u0430 \u0440\u0435\u0441
                \u0443\u0440\u0441\u043e\u0432",
      "scopes": [
        "resource",
        "metadata"
      ]
    },
    "vector_layer": {
      "identity": "vector_layer",
      "label": "\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439
                \u0441\u043b\u043e\u0439",
      "scopes": [
        "resource",
        "datastruct",
        "data",
        "metadata"
      ]
    },
    "webmap": {
      "identity": "webmap",
      "label": "\u0412\u0435\u0431-\u043a\u0430\u0440\u0442\u0430",
      "scopes": [
        "resource",
        "webmap",
        "metadata"
      ]
    },
    "wfsserver_service": {
      "identity": "wfsserver_service",
      "label": "\u0421\u0435\u0440\u0432\u0438\u0441 WFS",
      "scopes": [
        "resource",
        "metadata"
      ]
    },
    "wmsclient_connection": {
      "identity": "wmsclient_connection",
      "label": "\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435
                WMS",
      "scopes": [
        "connection",
        "resource",
        "metadata"
      ]
    },
    "wmsclient_layer": {
      "identity": "wmsclient_layer",
      "label": "C\u043b\u043e\u0439 WMS",
      "scopes": [
        "resource",
        "datastruct",
        "data",
        "metadata"
      ]
    },
    "wmsserver_service": {
      "identity": "wmsserver_service",
      "label": "\u0421\u0435\u0440\u0432\u0438\u0441 WMS",
      "scopes": [
        "resource",
        "metadata"
      ]
    }
  },
  "scopes": {
    "connection": {
      "identity": "connection",
      "label": "\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435",
      "permissions": {
        "connect": {
          "label": "\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432
                    \u0430\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438
                    \u043d\u0435\u043d\u0438\u044f"
        },
        "read": {
          "label": "\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u0430\u0440
                    \u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u043e
                    \u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f"
        },
        "write": {
          "label": "\u0417\u0430\u043f\u0438\u0441\u044c \u043f\u0430\u0440
                    \u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u043e
                    \u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f"
        }
      }
    },
    "data": {
      "identity": "data",
      "label": "\u0414\u0430\u043d\u043d\u044b\u0435",
      "permissions": {
        "read": {
          "label": "\u0427\u0442\u0435\u043d\u0438\u0435"
        },
        "write": {
          "label": "\u0417\u0430\u043f\u0438\u0441\u044c"
        }
      }
    },
    "datastruct": {
      "identity": "datastruct",
      "label": "\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430
                \u0434\u0430\u043d\u043d\u044b\u0445",
      "permissions": {
        "read": {
          "label": "\u0427\u0442\u0435\u043d\u0438\u0435"
        },
        "write": {
          "label": "\u0417\u0430\u043f\u0438\u0441\u044c"
        }
      }
    },
    "metadata": {
      "identity": "metadata",
      "label": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435",
      "permissions": {
        "read": {
          "label": "\u0427\u0442\u0435\u043d\u0438\u0435"
        },
        "write": {
          "label": "\u0417\u0430\u043f\u0438\u0441\u044c"
        }
      }
    },
    "resource": {
      "identity": "resource",
      "label": "\u0420\u0435\u0441\u0443\u0440\u0441",
      "permissions": {
        "change_permissions": {
          "label": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438
                    \u0435 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0434
                    \u043e\u0441\u0442\u0443\u043f\u0430"
        },
        "create": {
          "label": "\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435"
        },
        "delete": {
          "label": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435"
        },
        "manage_children": {
          "label": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438
                    \u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c
                    \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c
                    \u0438"
        },
        "read": {
          "label": "\u0427\u0442\u0435\u043d\u0438\u0435"
        },
        "update": {
          "label": "\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435"
        }
      }
    },
    "webmap": {
      "identity": "webmap",
      "label": "\u0412\u0435\u0431-\u043a\u0430\u0440\u0442\u0430",
      "permissions": {
        "display": {
          "label": "\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440"
        }
      }
    }
  }
}

Basic requests

GET /api/resource/(int: id)

Получить JSON представление ресурса. Для вызова этого метода необходимо как минимум право чтения ресурса.

PUT /api/resource/(int: id)

Изменить ресурс в соответствии с переданным JSON. Так же необходимо право чтения ресурса.

DELETE /api/resource/(int: id)

Удалить ресурс.

GET /api/resource/

Выбрать ресурсы и получить JSON.

Parameters:
  • parent (integer) – Идентификатор ресурса-родителя.
POST /api/resource/

Создать ресурс в соответствии с JSON.

Parameters:
  • parent (integer) – Идентификатор ресурса-родителя, так же может быть передан в JSON.
  • cls (string) – Идентификатор класса создаваемого ресурса.

Get feature

Get single feature

GET /api/resource/(int: id)/feature/(int: feature_id)

Get child resources

GET /api/resource/?parent=(int: id)

Example JSON response:

{
        "resource": {
                "id": 730,
                "cls": "webmap",
                "parent": {
                        "id": 640,
                        "parent": {
                                "id": 639
                        }
                },
                "owner_user": {
                        "id": 4
                },
                "permissions": [],
                "keyname": null,
                "display_name": "OpenDroneMap sample",
                "description": null,
                "children": false,
                "interfaces": [],
                "scopes": [
                        "resource",
                        "webmap",
                        "metadata"
                ]
        },
        "webmap": {
                "extent_left": -83.31,
                "extent_right": -83.3,
                "extent_bottom": 41.042,
                "extent_top": 41.034,
                "bookmark_resource": null,
                "root_item": {
                        "item_type": "root",
                        "children": [
                                {
                                        "layer_adapter": "image",
                                        "layer_enabled": true,
                                        "layer_max_scale_denom": null,
                                        "item_type": "layer",
                                        "layer_min_scale_denom": null,
                                        "display_name": "Seneca country",
                                        "layer_style_id": 642,
                                        "layer_transparency": null
                                }
                        ]
                }
        },
        "basemap_webmap": {
                "basemaps": [
                        {
                                "opacity": null,
                                "enabled": true,
                                "position": 0,
                                "display_name": "HikeBikeMap",
                                "resource_id": 1039
                        },
                        {
                                "opacity": null,
                                "enabled": true,
                                "position": 1,
                                "display_name": "Спутник",
                                "resource_id": 1038
                        }
                ]
        },
        "resmeta": {
                "items": {}
        }
},
{
        "resource": {
                "id": 641,
                "cls": "raster_layer",
                "parent": {
                        "id": 640,
                        "parent": {
                                "id": 639
                        }
                },
                "owner_user": {
                        "id": 4
                },
                "permissions": [],
                "keyname": null,
                "display_name": "odm_orthophoto_low",
                "description": null,
                "children": true,
                "interfaces": [
                        "IBboxLayer"
                ],
                "scopes": [
                        "resource",
                        "datastruct",
                        "data",
                        "metadata"
                ]
        },
        "resmeta": {
                "items": {}
        },
        "raster_layer": {
                "srs": {
                        "id": 3857
                },
                "xsize": 16996,
                "ysize": 17054,
                "band_count": 4
        }
},
{
        "resource": {
                "id": 1041,
                "cls": "wfsserver_service",
                "parent": {
                        "id": 640,
                        "parent": {
                                "id": 639
                        }
                },
                "owner_user": {
                        "id": 4
                },
                "permissions": [],
                "keyname": null,
                "display_name": "WFS service for demo",
                "description": null,
                "children": false,
                "interfaces": [],
                "scopes": [
                        "resource",
                        "service",
                        "metadata"
                ]
        },
        "resmeta": {
                "items": {}
        },
        "wfsserver_service": {
                "layers": [
                        {
                                "maxfeatures": 2222,
                                "keyname": "lines",
                                "display_name": "Просеки",
                                "resource_id": 534
                        }
                ]
        }
},
{
        "resource": {
                "id": 1036,
                "cls": "resource_group",
                "parent": {
                        "id": 640,
                        "parent": {
                                "id": 639
                        }
                },
                "owner_user": {
                        "id": 4
                },
                "permissions": [],
                "keyname": null,
                "display_name": "Sample folder",
                "description": null,
                "children": true,
                "interfaces": [],
                "scopes": [
                        "resource",
                        "metadata"
                ]
        },
        "resmeta": {
                "items": {}
        }
},
{
        "resource": {
                "id": 1037,
                "cls": "wmsserver_service",
                "parent": {
                        "id": 640,
                        "parent": {
                                "id": 639
                        }
                },
                "owner_user": {
                        "id": 4
                },
                "permissions": [],
                "keyname": null,
                "display_name": "OpenDroneMap at NextGIS.com",
                "description": null,
                "children": false,
                "interfaces": [],
                "scopes": [
                        "resource",
                        "service",
                        "metadata"
                ]
        },
        "resmeta": {
                "items": {}
        },
        "wmsserver_service": {
                "layers": [
                        {
                                "min_scale_denom": null,
                                "keyname": "seneca_country",
                                "display_name": "Seneca country",
                                "max_scale_denom": null,
                                "resource_id": 642
                        }
                ]
        }
}

Get all vector layer features

GET /api/resource/(int: id)/feature/

Example request:

GET api/resource/1878/feature/8 HTTP/1.1
Host: ngw_url
Accept: */*

Example JSON response:

{
  "id": 8,
  "geom": "MULTIPOLYGON (((4071007.5456240694038570 7385427.4912760490551591,
                           4071010.5846461649052799 7385440.8649944914504886,
                           4071018.6441773008555174 7385439.0351102603599429,
                           4071019.4902054299600422 7385442.7727465946227312,
                           4071057.3388322992250323 7385434.1683989763259888,
                           4071056.4928041673265398 7385430.4307667789980769,
                           4071065.5208148718811572 7385428.1726148622110486,
                           4071062.6153761623427272 7385414.7794514624401927,
                           4071058.2961799190379679 7385415.5581231201067567,
                           4071055.1347063803113997 7385401.6588457319885492,
                           4071007.8795825401321054 7385412.3850365970283747,
                           4071011.1301116724498570 7385426.6931363716721535,
                           4071007.5456240694038570 7385427.4912760490551591)))",
  "fields": {
      "OSM_ID": 128383475,
      "BUILDING": "apartments",
      "A_STRT": "проспект Ленина",
      "A_SBRB": "",
      "A_HSNMBR": "209",
      "B_LEVELS": "14",
      "NAME": ""
  }
}

Example response with photo and description:

{
     "id": 1,
     "geom": "MULTIPOINT (14690369.3387846201658249 5325725.3689366327598691)",
     "fields": {
         "name_official": "Краевое государственное автономное учреждение...",
         "name_short": "МФЦ Приморского края",
         "square": "702",
         "windows": "16",
         "start_date": "2013/12/30",
         "addr": "690080, Приморский край. г. Владивосток, ул. Борисенко д. 102",
         "phone_consult": "(423) 201-01-56",
         "opening_hours": "пн: 09:00-18:00 (по предварительной записи)вт: 09:00-20:00ср: 11:00-20:00чт: 09:00-20:00пт: 09:00-20:00 сб: 09:00-13:00 вс: выходной",
         "director": "Александров Сергей Валерьевич",
         "desc": "Центр создан в целях ...",
         "services_info": "Ознакомиться с перечнем можно ...",
         "issue_info": "ответственность должностных лиц ...",
         "website": "http://mfc-25.ru"
       },
     "extensions": {
         "description": " Описание объекта в ...",
         "attachment": [
             {
                 "id": 1,
                 "name": "fyADeqvXtXo.jpg",
                 "size": 107458,
                 "mime_type": "image/jpeg",
                 "description": null,
                 "is_image": true
             },
             {
                 "id": 2,
                 "name": "0_12cb49_b02b5fb0_orig.jpg",
                 "size": 65121,
                 "mime_type": "image/jpeg",
                 "description": "Текст подписи к фото",
                 "is_image": true
             }
         ]
     }
 }

URL к атачментам составляется из корня URL, который нужно посмотреть в веб-интерфейсе админки, и этого имени файла. Пример:

GET /api/resource/(int: id)/feature/(int: feature_id)/attachment/(int: attachment_id)/download

Загружать можно файлы любых типов. Получение превью фотографий из атачмента

GET /api/resource/(int: id)/feature/(int: feature_id)/attachment/(int: attachment_id)/image?size=200x150

Запрос количества обектов векторного слоя

GET /api/resource/(int: id)/feature_count

Root requests

Не рекомендуется, начиная с версии 2.2.

GET /resource/-/child/

Корневой ресурс (список)

Не рекомендуется, начиная с версии 2.2.

GET /resource/-/child/(int: id)

Корневой ресурс (объект id)

GET /resource/(int: id)/child/

Список дочерних ресурсов ресурса id (список)

GET /resource/(int: parent_id)/child/(int: id)

Ресурс id (объект)

Не рекомендуется, начиная с версии 2.2.

GET /resource/store/

Плоский список всех ресурсов (список)

Не рекомендуется, начиная с версии 2.2.

GET /resource/store/(int: id)

Ресурс id (объект)

Не рекомендуется, начиная с версии 2.2.

GET /resource/store/?id=(int: id)

Ресурс id (объект), то же самое, что и предыдущий запрос

Не рекомендуется, начиная с версии 2.2.

GET /resource/store/?parent_id=(int: id)

Cписок дочерних объектов объекта id (список)

Get version

Добавлено в версии 3.0.

To get version make request:

GET /api/component/pyramid/pkg_version

Example request:

GET /api/component/pyramid/pkg_version HTTP/1.1
Host: ngw_url
Accept: */*

Example JSON response:

{
   "nextgisweb": "2.0",
   "nextgisweb_mapserver": "0.0dev"
}