Come faccio a prendere i dati dalla lista presente nella rete root della raccolta del sito root?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/95567

  •  10-12-2019
  •  | 
  •  

Domanda

Abbiamo bisogno di popolare alcuni dati su una pagina dell'applicazione. La pagina dell'applicazione è presente nella cartella Layout e quindi è accessibile tramite il rispettivo URL del sito. Ci sono più collezioni di siti. Ogni collezione del sito ha il proprio set di utenti (unici) che non interferiscono o hanno diritti con altre sitecollections.

C'è un elenco nella raccolta del sito root (la prima raccolta del sito che creiamo dopo aver creato un applicazione Web) Web.

Ho bisogno di tirare i dati da questo elenco nella pagina dell'applicazione.

La mia domanda è Come posso accedere alle raccolte del sito root , Web root utilizzando il modello oggetto SP Server da qualsiasi altro sito web collections?

Anche, Quali sarebbero le implicazioni di sicurezza , perché non possiamo avere un utente di dire la raccolta 2 o 3 o 4 per avere alcun diritto nella prima raccolta del sito. Significa che questo scenario non è possibile? C'è qualche altra soluzione alternativa?

Il requisito è avere una pagina politica che dovrebbe ritirare i dati da un elenco e mostrare agli utenti. L'utente desidera che i dati della pagina dei criteri vengano selezionati dinamicamente dal 1 ° articolo dell'elenco. Questa pagina è una pagina dell'applicazione e quindi è accessibile a ciascun utente sul web della raccolta di ogni sito. Tuttavia, la mia preoccupazione riguarda il modo di accedere a questi dati da SiteCollection [0] .rootweb e per quanto riguarda le implicazioni sulla sicurezza poiché gli utenti di altre raccolte di siti non hanno alcun diritto su sitecollection [0]. Update1

 SPSecurity.RunWithElevatedPrivileges(delegate()
                {                   
                    SPWeb rootSiteColRootWeb = SPContext.Current.Site.WebApplication.Sites[0].RootWeb;

                    SPList spList = rootSiteColRootWeb.Lists.TryGetList("MyMenu");
                        if (spList != null)
                        {
                            SPQuery qry = new SPQuery();
                            qry.Query =
                            @"   <OrderBy>
      <FieldRef Name='Title' />
   </OrderBy>";
                            qry.ViewFields = @"<FieldRef Name='Title' /><FieldRef Name='Data' />";
                            SPListItemCollection listItems = spList.GetItems(qry);

                            contentsDiv.InnerHtml = listItems[0]["Data"].ToString();
                        }
                });
.

Update2

     SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite site = new SPSite(SPContext.Current.Site.WebApplication.Sites[0].RootWeb.Url))
                    {
                        SPWeb rootWeb = site.RootWeb;

                        SPList spList = rootWeb.Lists.TryGetList("MyMenu");
                        if (spList != null)
                        {
                            SPQuery qry = new SPQuery();
                            qry.Query =
                            @"   <OrderBy>
      <FieldRef Name='Title' />
   </OrderBy>";
                            qry.ViewFields = @"<FieldRef Name='Title' /><FieldRef Name='Data' />";
                            SPListItemCollection listItems = spList.GetItems(qry);

                            contentsDiv.InnerHtml = listItems[0]["Data"].ToString();
                        }

                    }
                });
.

Il codice presente in entrambi gli aggiornamenti 1 e Aggiorna 2 è eseguito correttamente quando l'utente senza diritti sulla situazione su cui è presente l'elenco. Voglio sapere qual è il metodo migliore e perché?

È stato utile?

Soluzione

Per la tua domanda originaria IV ha risposto qui per ottenere la rete principale di un sito:

Per la rete principale della raccolta del sito:

SPWeb spWeb = SPContext.Current.Site.RootWeb;
SPList spList = spWeb.Lists.TryGetList("MyList");
.

Se è la rete di root della raccolta del sito root rispetto a Roberts Way è il modo giusto per ottenere la radice SPSite!

Valore URL spSite

A seguito della serranità e dell'account utilizzato:

SharePoint offre accesso in lettura limitato in modo da poter arrivare a SiteColection 2 URL altrimenti non potresti essere in grado di farlo. In esecuzione sul server non ha nulla da governare con esso! Il codice è eseguito sotto l'utente autenticato NT! e Defnaltly Not App Pool Pool Account !!

Just Becasue Code è eseguito sotto il server non significa che la sua corsa in APP Pool Pool Account! L'unico modo in cui accade è se si impostano concorribilmentePrivlages altrimenti darebbe a tutti gli utenti l'accesso non commercializzato! Per dimostrare il mio punto!

All'interno del tuo ASPX.CS Aggiungi il seguente codice, ti mostrerà l'utente corrente ... è questo utente che viene utilizzato il contesto corrente ed è questo utente utilizzato per accedere al sito e ai file _Layouts all'interno Hive!

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    string strUserName = SPContext.Current.Web.CurrentUser.LoginName;
    Label l = new Label();
    l.id = "userID";
    l.Text = strUserName;
    this.Controls.Add(l);
}
.

Se vedi un account di sistema rispetto al suo account Pool App .... se vedi un normale account utente rispetto a non essere in esecuzione sotto POOL APP! Se è in esecuzione sotto il conto della pool di app di quanto dovresti essere preoccupato come il tuo accesso non commerciale che è un'interesse migliore.

Come faccio a sapere anche che funziona sotto il conto autenticato NT? Bene, prova a provare a accedere al file come fastidioso :) Avrete l'accesso negato ... per questo hai bisogno di impersonazione come non nemmeno il lavoro di privilegi elevati!

Pagina dell'applicazione nella cartella Layouts Accesso all'oggetto applicazione Web

Altri suggerimenti

Per accedere all'uso del rootweb

var rootWeb = SPContext.Current.Site.WebApplication.Sites[0].RootWeb;
.

Se il tuo utente non avrà accesso a questa raccolta, è necessario aprirlo in privilegi elevati:

        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            using (SPSite site = new SPSite(SPContext.Current.Site.WebApplication.Sites[0].Id))
            using (SPWeb rootWeb = site.OpenWeb())
            {
                // Do your stuff with rootWeb
            }
        }
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top