Multisite - Accessing content across sites.
I am working on making our controls compatible with multisite. Right now I have not found a good generic solution for getting all content of a particular type accessible to a site. At the moment this is a rough example of what I have for finding albums, but I would like to know if there is a better way than iterating through each provider and and checking permissions for each site. What I am looking for is the most generic solution for finding content that a site can access.
01.
public
IList<Album> getAlbumns()
02.
03.
IList<
string>
_ProvidersNames = LibrariesManager.ProvidersCollection.Select(item => item.Name);
04.
IList<Album> _Albums =
new
List<Album>();
05.
foreach
(var item
in
_ProvidersNames)
06.
07.
var mg =
new
LibrariesManager(item);
08.
var _currentAlbums = mg.GetAlbums();
09.
if
(_currentAlbums !=
null
)
10.
11.
_Albums =_Albums.Concat(_currentAlbums.ToList()).ToList();
12.
13.
14.
return
_Albums;
15.
Hello Chris,
We currently do not expose API for getting all items from a module regardless of site's context. The way to get all items is to get the providers for this module and iterate through them (which you have already done). You can also use the following API queries to change site context, get providers, etc.:
var multisiteContext = SystemManager.CurrentContext
as
MultisiteContext;
///get the current site by name
var currentSiteName = multisiteContext.CurrentSite.Name;
//get the module's provider by the module's name
var currentSiteProv = multisiteContext.CurrentSite.GetProviders(
"ModuleName"
).Select(p => p.ProviderName);
//if you need to change the site context
multisiteContext.ChangeCurrentSite(multisiteContext.GetSiteByName(
"MyOtherSiteName"
));
First, thank you for your response. That will be helpful in transitioning some of our code!
Secondly I have a question about the context of this statement below.
var __providers = multisiteContext.CurrentSite.GetProviders(ModuleName);
In the above line of code would __providers will be all providers for the module that the site owns or has permission to use. If I need to do more to check permission how do I check Permission for those providers in a generic way (meaning using this in a helper library where the user-context isn't known until runtime .