Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Question: Using a mapping service set up with ArcGIS Server, how can I set up a parameter that limits which features are being rendered? e.g. "/service?organization=megacorp"?

Background: I am working on a web mapping application which will be used by organizations. They all have their own data, but it is stored in the same tables.

When they log in, they will be brought to a map which shows their data points. Due to existing features, our preference is to store this data in a single table:

points_table
id | organization | name       
------------------------------
1  | the state    | poor house 
2  | megacorp     | tenements  
3  | union carbide| bhopal

It looks like the proper way to secure this service will be to use windows integrated authentication, and although I'm not clear on the details, use that to control which features are being rendered.

share|improve this question

2 Answers 2

up vote 1 down vote accepted

It looks like the proper way to secure this service will be to use windows integrated authentication, and although I'm not clear on the details, use that to control which features are being rendered.

Potentially, but not with ArcGIS Server security. ArcGIS Server security at 10.1 currently only allows you to dish out individual map services to different roles.

Approach 1 - Serve same data up as multiple services

  1. Add points_table to ArcMap.
  2. Apply definition query to only show features for specific organisation.
  3. Publish this as a map service.
  4. Repeat 1-3 for each organisation.
  5. Setup ArcGIS Server security and add roles for each organisation. You mention Windows Authentication, but im assuming that each organisation does not belong to one active directory, so I would recommend just using the default users & roles identity store within ArcGIS Server, and create one user under each organisation role, and provide those credentials to each organisation to use.
  6. Secure each service to each organisation role.
  7. Serve all of these services up in a web application, and making use of the Esri Javascript API (can use any API, or even the ArcGIS Viewer for Flex), you can prompt users to login using the Identity Manager. Each organisation will only see the corresponding service they are entitled to see. Make sure you overlay these services onto a nice looking basemap as well.

Approach 2 - Use one Map Service and make use of the QueryTask

  1. Server up your points_layer as one map service.
  2. Manage security outside of ArcGIS Server. Perhaps with basic authentication at the web server level, creating a different user account for each organisation to use.
  3. Users hit a login page. Once prompted to login, they are then redirected to your web application. (Or the login is just a modal prompt on the actual web application page, redirecting you to a different page if incorrect credentials).
  4. As the user (organisation) logs in, this then feeds in this user to a QueryTask to only display the relevant points from your one map service on the map.

e.g.

sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/1/query?text=Texas

This REST call returns only the states that match the value of Texas.

These are just two ideas. Personally I would go with #2, but will depend on how secure this needs to be (#1 is more secure), how many points/organisations you have, and how much server power do you have (#1 will suck up more resources).

Id wait awhile to see what other answers pop up, as there may well be a better way.

share|improve this answer

According to your question following things may be possible :

1.If you are using ArcGIS Server 10.1 then you can use ArcGIS administrator API (Click here for more details) 2.If you are using REST Service (through java script application) then you can set such query tasks to control the features (Click here for more details)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.