Можно создать собственную таблицу Location
(Id, Name, ParentLocation) и таблицу AccessControl
(ClientId, LocationId). Когда клиент связан с местоположением, вы можете предоставить доступ ко всем расположениям под ним. Некоторые примеры:
ID Name Parent
-------------------
1 World NULL -- Need to represent all countries
2 Brazil 1 -- A country
3 São Paulo 2 -- A state
4 São Paulo 3 -- A city
Если вы хотите прикрепить свою текущую модель, например, таблицу (ClientId, CountryId обнуляемый, StateId обнуляемый, CityId обнуляемый). Таким образом, вы можете определить свой безопасный доступ в качестве своего определения, но вам придется иметь дело с пустыми полями.