{"id":9297,"date":"2022-05-25T17:54:00","date_gmt":"2022-05-25T20:54:00","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=9297"},"modified":"2022-05-26T10:54:18","modified_gmt":"2022-05-26T13:54:18","slug":"usando-geofence-atraves-da-api-rest-do-geoserver","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2022\/05\/25\/usando-geofence-atraves-da-api-rest-do-geoserver\/","title":{"rendered":"Usando Geofence atrav\u00e9s da API REST do GeoServer"},"content":{"rendered":"<p>Prezados leitores,<\/p>\n<p>H\u00e1 alguns posts atr\u00e1s falei sobre a <a href=\"https:\/\/www.fernandoquadro.com.br\/html\/2022\/03\/11\/usando-geofence-para-adicionar-seguranca-em-nivel-de-camada-no-geoserver\/\" rel=\"noopener\" target=\"_blank\">utiliza\u00e7\u00e3o do GeoFence<\/a>, que \u00e9 um plugin que nos permite subir ao n\u00edvel da camada e definir a permiss\u00e3o conforme nossa necessidade, utilizando as configura\u00e7\u00f5es atrav\u00e9s da interface gr\u00e1fica. Hoje irei mostrar como realizar as configura\u00e7\u00f5es de acesso\/restri\u00e7\u00e3o atrav\u00e9s da API REST.<\/p>\n<p><strong>1.<\/strong> Criar regra para restringir acesso a qualquer layer e usu\u00e1rio<\/p>\n<p>Para isso vou criar um arquivo XML que irei dar o nome de geofence_restrict_all_access.xml, e ele ir\u00e1 conter o seguinte conte\u00fado:<\/p>\n<pre>\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;Rule&gt;\r\n      &lt;access&gt;DENY&lt;\/access&gt;\r\n&lt;\/Rule&gt;\r\n<\/pre>\n<p>Ap\u00f3s criar esse arquivo, basta executar o comando abaixo:<\/p>\n<pre>\r\ncurl.exe -v -u admin:geoserver -XPOST -H \"Content-type: text\/xml\" -d @geofence_restrict_all_access.xml http:\/\/localhost:8080\/geoserver\/rest\/geofence\/rules\r\n<\/pre>\n<p><strong>2.<\/strong> Criar regra para permitir acesso do ROLE ADMIN as camadas <\/p>\n<p>Como no passo 1 eu restringi o acesso a todo e qualquer usu\u00e1rio, agora estou permitindo o acesso a camadas para o ROLE ADMIN, atrav\u00e9s das informa\u00e7\u00f5es contidas no arquivo geofence_restrict_admin.xml detalhado abaixo:<\/p>\n<pre>\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;Rule&gt;\r\n      &lt;userName&gt;ADMIN&lt;\/userName&gt;\r\n      &lt;access&gt;ALLOW&lt;\/access&gt;\r\n&lt;\/Rule&gt;\r\n<\/pre>\n<p>Ap\u00f3s a cria\u00e7\u00e3o do arquivo, \u00e9 necess\u00e1rio executar no console o comando abaixo:<\/p>\n<pre>\r\ncurl.exe -v -u admin:geoserver -XPOST -H \"Content-type: text\/xml\" -d @geofence_restrict_admin.xml http:\/\/localhost:8080\/geoserver\/rest\/geofence\/rules\r\n<\/pre>\n<p><strong>3.<\/strong> Adicionar usu\u00e1rio geocursos<\/p>\n<p>Agora vamos adicionar um usu\u00e1rio chamado geocursos, e partir dele vamos criar nossas regras de acesso. Neste caso n\u00e3o criamos um arquivo XML, pois o comando est\u00e1 direto na requisi\u00e7\u00e3o, veja:<\/p>\n<pre>\r\ncurl.exe -v -u admin:geoserver -X POST http:\/\/localhost:8080\/geoserver\/rest\/security\/usergroup\/users\/ -H \"accept: application\/json\" -H  \"content-type: application\/xml\" -d \"&lt;?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?&gt;&lt;user&gt;\\t&lt;userName&gt;geocursos&lt;\/userName&gt;\\t&lt;password&gt;geocursos&lt;\/password&gt;\\t&lt;enabled&gt;true&lt;\/enabled&gt;&lt;\/user&gt;\"\r\n<\/pre>\n<p><strong>4.<\/strong> Adicionar regras para o usu\u00e1rio geocursos<\/p>\n<p>Agora vamos adicionar regras de acesso para o nosso novo usu\u00e1rio (geocursos), e na regra que segue abaixo estamos dando acesso ao m\u00e9todo GetMap da camada topp:states (atrav\u00e9s do servi\u00e7o WMS). Vamos colocar essas regra dentro do arquivo geofence_restrict_geocursos.xml:<\/p>\n<pre>\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;Rule&gt;\r\n      &lt;userName&gt;geocursos&lt;\/userName&gt;\r\n      &lt;workspace&gt;topp&lt;\/workspace&gt;\r\n      &lt;layer&gt;states&lt;\/layer&gt;\r\n      &lt;service&gt;WMS&lt;\/service&gt;\r\n      &lt;request&gt;GetMap&lt;\/request&gt;\r\n      &lt;access&gt;ALLOW&lt;\/access&gt;\r\n&lt;\/Rule&gt;\r\n<\/pre>\n<p>Ap\u00f3s criado o aquivo XML, basta executar o comando abaixo no console::<\/p>\n<pre>\r\ncurl.exe -v -u admin:geoserver -XPOST -H \"Content-type: text\/xml\" -d @geofence_restrict_geocursos.xml http:\/\/localhost:8080\/geoserver\/rest\/geofence\/rules\r\n<\/pre>\n<p><strong>5.<\/strong> Adicionar o usu\u00e1rio fernandoquadro<\/p>\n<p>Nesse passo, estamos adicionando um novo usu\u00e1rio, nesse caso o fernandoquadro, conforme demonstra o comando abaixo:<\/p>\n<pre>\r\ncurl.exe -v -u admin:geoserver -X POST http:\/\/localhost:8080\/geoserver\/rest\/security\/usergroup\/users\/ -H \"accept: application\/json\" -H  \"content-type: application\/xml\" -d \"&lt;?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?&gt;&lt;user&gt;\\t&lt;userName&gt;fernandoquadro&lt;\/userName&gt;\\t&lt;password&gt;fernando&lt;\/password&gt;\\t&lt;enabled&gt;true&lt;\/enabled&gt;&lt;\/user&gt;\"\r\n<\/pre>\n<p><strong>6.<\/strong> Adicionar regra para o usu\u00e1rio fernandoquadro<\/p>\n<p>Diferente do que configuramos para o usu\u00e1rio geocursos, para o usu\u00e1rio fernandoquadro estamos dando acesso a camada topp:states por\u00e9m apenas quando o atributo STATE_ABBR for igual a FL. Qualquer outra informa\u00e7\u00e3o que esteja nessa camada n\u00e3o ser\u00e1 exibida para o usu\u00e1rio fernandoquadro. Para isso, vamos criar o arquivo geofence_restrict_fernandoquadro.xml com o seguinte conte\u00fado:<\/p>\n<pre>\r\n&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;Rule&gt;\r\n      &lt;userName&gt;fernandoquadro&lt;\/userName&gt;\r\n      &lt;workspace&gt;topp&lt;\/workspace&gt;\r\n      &lt;layer&gt;states&lt;\/layer&gt;\r\n      &lt;access&gt;ALLOW&lt;\/access&gt;\r\n      &lt;layerDetails&gt;\r\n                &lt;layerType&gt;VECTOR&lt;\/layerType&gt;\r\n                &lt;cqlFilterRead&gt;STATE_ABBR = 'FL'&lt;\/cqlFilterRead&gt;\r\n                &lt;cqlFilterWrite&gt;STATE_ABBR = 'FL'&lt;\/cqlFilterWrite&gt;\r\n                &lt;attribute&gt;\r\n                        &lt;name&gt;STATE_NAME&lt;\/name&gt;\r\n                        &lt;datatype&gt;String&lt;\/datatype&gt;\r\n                        &lt;accessType&gt;READWRITE&lt;\/accessType&gt;\r\n                &lt;\/attribute&gt;\r\n                &lt;attribute&gt;\r\n                        &lt;name&gt;STATE_ABBR&lt;\/name&gt;\r\n                        &lt;datatype&gt;String&lt;\/datatype&gt;\r\n                        &lt;accessType&gt;READWRITE &lt;\/accessType&gt;\r\n                &lt;\/attribute&gt;\r\n\t\t&lt;attribute&gt;\r\n                        &lt;name&gt;the_geom&lt;\/name&gt;\r\n                        &lt;datatype&gt;MultiPolygon&lt;\/datatype&gt;\r\n                        &lt;accessType&gt;READWRITE&lt;\/accessType&gt;\r\n                &lt;\/attribute&gt;\r\n        &lt;\/layerDetails&gt;\r\n&lt;\/Rule&gt;\r\n<\/pre>\n<p>Feito isso, basta executar o comando abaixo:<\/p>\n<pre>\r\ncurl.exe -v -u admin:geoserver -XPOST -H \"Content-type: text\/xml\" -d @geofence_restrict_fernandoquadro.xml http:\/\/localhost:8080\/geoserver\/rest\/geofence\/rules\r\n<\/pre>\n<p><strong>PS: <\/strong>Se voc\u00ea perceber acima, dentro da tag <em>LayerDetails<\/em>, tem algumas informa\u00e7\u00f5es dentro das tags <em>attribute<\/em>. Essa configura\u00e7\u00e3o, <a href=\"https:\/\/docs.geoserver.org\/latest\/en\/user\/community\/geofence-server\/tutorial.html\" rel=\"noopener\" target=\"_blank\">segundo a documenta\u00e7\u00e3o oficial<\/a> \u00e9 pra restringir o acesso a coluna do banco (apresentar apenas as que estivem listadas no arquivo de configura\u00e7\u00e3o), por\u00e9m at\u00e9 a vers\u00e3o atual (2.21.0) ela ainda n\u00e3o funciona via REST, apenas se voc\u00ea realizar a configura\u00e7\u00e3o pela interface gr\u00e1fica do GeoServer. Esse erro j\u00e1 foi reportado a equipe de desenvolvimento do GeoServer, por\u00e9m, ainda n\u00e3o foi solucionada.<\/p>\n<p>Esse foi apenas um exemplo de como realizar suas restri\u00e7\u00f5es de acesso utilizando o GeoFence pela API REST, mas claro que as possibilidade s\u00e3o enormes e tudo vai depender da sua necessidade. Espero que o post tenha sido \u00fatil. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prezados leitores, H\u00e1 alguns posts atr\u00e1s falei sobre a utiliza\u00e7\u00e3o do GeoFence, que \u00e9 um plugin que nos permite subir ao n\u00edvel da camada e definir a permiss\u00e3o conforme nossa necessidade, utilizando as configura\u00e7\u00f5es atrav\u00e9s da interface gr\u00e1fica. Hoje irei&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2022\/05\/25\/usando-geofence-atraves-da-api-rest-do-geoserver\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":9299,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[349,208,61],"class_list":["post-9297","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-geofence","tag-geoserver","tag-seguranca"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=9297"}],"version-history":[{"count":11,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9297\/revisions"}],"predecessor-version":[{"id":9309,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/9297\/revisions\/9309"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/9299"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=9297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=9297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=9297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}