Pergunta

Há uma página de aplicativo, implantado para a pasta layouts.

O URL da página do aplicativo é:

  • http://server:port/sc2/_layouts/test/mypage.aspx

Agora, existe um utilizador com permissões só de leitura (adicionado ao grupo visitantes).O utilizador é adicionado apenas no conjunto de sites (sc2) e nenhum outro lugar.

O código torna o acesso ao conjunto de sites 01 (no mesmo aplicativo web), e acessa uma lista em que o conjunto de sites.O usuário não tem qualquer direito/permissões no site de coleta 01.

Aqui está o código do aplicativo página:

 SPSite site = SPContext.Current.Site.WebApplication.Sites[0];

    SPWeb rootWeb = site.RootWeb;

                        SPList spList = rootWeb.Lists.TryGetList("myList");
                        if (spList != null)
                        {
                            SPQuery qry = new SPQuery();
                            qry.Query =
                            @"   <OrderBy>
      <FieldRef Name='Created' Ascending='False'/>
   </OrderBy>";
                            qry.ViewFields = @"<FieldRef Name='Title' /><FieldRef Name='Col2' />";
                            SPListItemCollection listItems = spList.GetItems(qry);
                            if (listItems.Count > 0)
                            {
                                MyDiv.InnerHtml = listItems[0]["Col2"].ToString();
                            }
                        }

Quando nós logon no PC como este usuário, somente com permissões de leitura) podemos notar que o código é executado com êxito.No caso de não lançar erro porque não estamos usando RunWithElevatedPriviledges?

Eu sinto que deve lançar a exceção, na linha 1, e não pode prosseguir.

Foi útil?

Solução

O código está correto e é bom!ao acessar as páginas aspx em que o servidor de sua não execução no pool de aplicativo conta a sua execução sob nt autenticada de conta, que deveria ser o seu próprio!como posso saber?eu uso aspx em layouts de página o tempo todo e dando/denição de pool de aplicativo de acesso à conta não teria efeito!uma boa expample seriam dois os usuários..um conjunto de sites de administração e outro de um usuário normal.

coleção administração seria capaz de acessar o arquivo de multa, onde o usuário teria acesso negado...como tweytjens faz deve ter acesso de leitura, mas eles não!por quê?porque se você não adicionar o grupo de usuários dentro de webapplication(dentro da administração central) lista de utilizadores como acesso de leitura você não obter acesso a ficheiros em 12/14/15 ramo!tendo runwithelevated privlages que cercam o código dentro do aspx significa que o código seria executado em applicaiton conta do pool!!!tendo o código que retorna o seu nome de usuário dentro do aspx seria firmemente mostrar que im correto e tweytjens resposta está errada!em appoolaccount nos damos conta de sistema e, sem ela, se você tem acesso, você irá obter o nt autenticado conta que deve ser a conta que você fez logon com!

deixando isso de lado....para explicar o que está acontecendo..

dizem que eu tenho raiz do site chamado site1 e eu tenho de sites de sub site2 e site3.Eu interromper a herança de site2 e dar a um usuário a permissão de leitura somente no local2.

Então você não deve ter o acesso ao site http://site1 mas deve ser capaz de obter para http://site1/site2 sem obter um acesso negado.

a razão pela qual você pode obter a site2 é que agora você tem limmited acesso em site1 para ser capaz de obter a site2.

O nível de permissão Acesso Limitado é incomum.Ele permite que um usuário ou grupo para navegar para uma página de site ou biblioteca para aceder a um item de conteúdo específico.Normalmente, o usuário tem acesso a um único item em uma lista ou biblioteca, mas não tem permissão para abrir ou editar quaisquer outros itens na biblioteca.A permissão de Acesso limitado nível inclui todas as permissões que o usuário precisa para acesso o item necessário.

Você não pode atribuir o nível de permissão Acesso Limitado diretamente a um usuário ou grupo.Em vez disso, você atribuir a permissão adequada para o único item e, em seguida, SharePoint atribui automaticamente o Acesso Limitado para outros necessários locais.

http://office.microsoft.com/en-gb/products/understanding-permission-levels-HA102772313.aspx?CTT=5&origin=HA102771919

mais sobre permissões explicado em detalhe

http://office.microsoft.com/en-gb/office365-sharepoint-online-enterprise-help/introduction-control-user-access-with-permissions-HA102771919.aspx#_Toc352060310

EDITAR

administração central -> aplicação de gestão -> gerenciar aplicativos da web -> clique em aplicativo da web -> clique em diretiva de usuário

que é uma lista de usuários que terão acesso ao webapplication nível._layouts é nesse nível, então, para que um usuário tenha acesso seria nesse nível.

responsabilidade elevados privlages faria o atual conta executar como do sistema de pool de aplicativo conta.sem responsabilidade elevados privlages você seria executado em sua conta normal, mas exigiria acesso de leitura no web applicaition nível caso contrário, você obtém acesso negado!

para o seu local de acesso problema que tem todo parcialmente acima e também, em parte, com o fato de que há limmited política de acesso local que é definido pelo sharepoint!.

EDITAR

sim, eu já descrito por isso!sharepoint dá restrito acesso de leitura para que você possa obter a sitecolection 2 URL, caso contrário você não seria capaz.Execução no servidor não tem nada fazer com ele!o código é executado no nt usuário autenticado!e defnaltly não de pool de aplicativo conta!!

Só porque o código é executado no servidor não significa que é executado sob a conta de pool de aplicativo!a única maneira de isso acontecer é se você definir runwithelevatedprivlages caso contrário, você estaria dando a todos os usuários unnessary acesso!Para provar meu ponto de vista!

dentro de seu aspx.cs adicione o seguinte código, ele irá mostrar-lhe o usuário atual...é este o utilizador de que o contexto atual está sendo usado e é esse usuário que é usado para acessar o site e _layouts arquivos dentro do ramo!

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 você vê o sistema de conta que a sua conta de pool de aplicativo....se você ver uma conta de usuário normal do que a sua não execução no pool de aplicativo!Se ele está sendo executado sob a conta de pool de aplicativo que você deve estar preocupado como a sua doação unnessary de acesso que é aginst melhores práticas.

como também sei que é executado sob nt autenticado conta?bem, só tentar acessar o arquivo como annoymous :) você pode obter acesso negado...para isso você precisa de representação como não mesmo elevados privlages trabalho!

SharePoint -o acesso ao caminho é negado

Outras dicas

Uma vez que o código é em um .página aspx, o código é executado no servidor e será executada com as credenciais da conta do pool de aplicativos em que este aplicativo é executado e não sob as credenciais do cliente, como por exemplo,O Silverlight ou o Javascript do lado do cliente o código de faria.

Nenhum código não deve atirar quaisquer exceções..desde que o utilizador tem permissões de Leitura, e espero que a Lista é também herdar permissões do site, significa que o usuário tem permissões de Leitura na Lista..

Assim, se você tentar adicionar um item na Lista, ele deve lançar a exceção..Leitura / Consulta não lança exceções..

ATUALIZAÇÃO

Na verdade, a resposta parece ser direito

Permissões para as páginas de aplicação, são normalmente definidos no página do aplicativo propriamente dito, usando o RightsRequired propriedade.

Aqui é um abrangente post no blog sobre a Aplicação de segurança da Página: http://blog-sharepoint.blogspot.com/2011/10/sharepoint-application-page-security.html

Também dê uma olhada:

Proteção De Aplicativos Do SharePoint Páginas

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top