Usuário com melhor resposta
Problema com nivel de permissão

Pergunta
-
Pessoal, minha WebParts Inclui Dados em uma Lista. Porém, estou com problemas nas permissões. Para que o usuário tenha permissão para incluir nesta lista, a primeira o Opção do Nivel de permissão tem que estar marcada:
Gerenciar Listas - Crie e exclua listas, adicione ou remova colunas em uma lista e adicione ou remova exibições públicas de uma lista
Mas essa opção abre toda a lista praticamente na Ações do Site, permitindo que tenha acesso em Editar as Permissões, Configurar Site e etc.
Desrmarcando essa Opção, não deixa o usuário incluir na lista, dando o Erro Abaixo. Alguém pode ajudar nesta questão?
0x80070005
Junior Santana- Editado Jr_inc sexta-feira, 3 de fevereiro de 2012 14:17
Respostas
-
Bom pessoal... agradeço muito a ajuda de vcs todos.
Depois de muitas tentativas, consegui sanar esse problema alterando uma linha e adicionando outra, veja só:
Essa linha: using (SPSite site = new SPSite(“http://intranet/”))
Troquei por essa:
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
E adicionei essa:
web.AllowUnsafeUpdates = true;
Funcionou!!!!! Ufaaaaa
Abraços a todos.
Junior Santana
- Marcado como Resposta Jr_inc quinta-feira, 16 de fevereiro de 2012 13:47
Todas as Respostas
-
Junior,
existem várias opções até chegar em uma conclusão, porem, ja confirmou se o usuário tem permissão de edição nesta lista em que você tenta inserir itens?
Pelo que você colocou ai em cima, parece que está alterando permissões de site.
sem ela não é possível.
caso tenha, descreva melhor o cenário desta web part, por exemplo, o usuário adiciona o item em uma pagina apos ela estar carregada ou é adicionado no momento do load automaticamente, tipo um contador de visitas?
enfim, descreva melhor para que possamos ajudar.
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw -
Junior,
existem várias opções até chegar em uma conclusão, porem, ja confirmou se o usuário tem permissão de edição nesta lista em que você tenta inserir itens?
Pelo que você colocou ai em cima, parece que está alterando permissões de site.
sem ela não é possível.
caso tenha, descreva melhor o cenário desta web part, por exemplo, o usuário adiciona o item em uma pagina apos ela estar carregada ou é adicionado no momento do load automaticamente, tipo um contador de visitas?
enfim, descreva melhor para que possamos ajudar.
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannwIvan, como posso usar uma credencial neste código, sem ter que ficar dando permissão para os usuários?
using (SPSite site = new SPSite(“http://intranet/”))
{
using (SPWeb web = site.OpenWeb())
{
SPList lista = web.Lists["Agenda Horarios "];
SPListItemCollection todos = lista.Items;
SPListItem item = lista.AddItem();
item["Mensagem"] = “Minha reserva”;
item["Hora de Início"] = “12:30:00″;
item["Hora de Término"] = “13:30:00″;
item.Update();
}
}
Junior Santana
-
-
Junior, o que se faz é executar o código com elevação de privilégios, mas tenha certeza de que é necessário. Reitero o sentimento de que você está olhando permissão no lugar errado, mas de qualquer maneira segue o exemplo:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(web.Site.ID))
{
// implementation details omitted
}
});pode ler a referência completa em: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
-
Junior, o que se faz é executar o código com elevação de privilégios, mas tenha certeza de que é necessário. Reitero o sentimento de que você está olhando permissão no lugar errado, mas de qualquer maneira segue o exemplo:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(web.Site.ID))
{
// implementation details omitted
}
});pode ler a referência completa em: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
Ivan, deu esse MSG:
A validação de segurança desta página é inválida. Clique em Voltar no navegador da Web, atualize a página e tente a operação novamente.
Junior Santana
-
-
Junior,
Na hora de instanciar o SPSite, tem um construtor que você insere a url e um token.
De uma olhada no link
http://msdn.microsoft.com/en-us/library/ms469253.aspx
Tem uma média de quantos usuários podem criar um item nessa lista?
Junior Santana
-
-
Junior, vou subir uma maquina aqui para simular seu problema.
Me diga uma coisa, esse código é executado como evento de um botão ? como um page load da pagina?
Tem mais algum código antes ou depois ? o problema pode não ser nesse trecho.
Enquanto eu monto aqui, aguardo as respostas.
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
-
Junior, vou subir uma maquina aqui para simular seu problema.
Me diga uma coisa, esse código é executado como evento de um botão ? como um page load da pagina?
Tem mais algum código antes ou depois ? o problema pode não ser nesse trecho.
Enquanto eu monto aqui, aguardo as respostas.
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
Código completo da ação do Botão. (obrigado pela ajuda)
protected void Button1_Click(object sender, EventArgs e)
{
CriaTableConsulta();
try
{
for (int i = 0; i < Calendar1.SelectedDates.Count; i++)
{
ano = Calendar1.SelectedDates[i].Year.ToString();
mes = Calendar1.SelectedDates[i].Month.ToString();
dia = Calendar1.SelectedDates[i].Day.ToString();
}
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://intranet/"))
{
using (SPWeb web = site.OpenWeb())
{
SPList lista = web.Lists["Agenda Massoterapeuta"];
SPListItemCollection todos = lista.Items;
if (txtnome.Text != "")
{
usuario = txtnome.Text;
}
string horaAgendar = dia + "/" + mes + "/" + ano + " " + DropDownList1.SelectedItem.Text + ":00";
erro.Text = "";
bool gravarHora = true;
foreach (SPListItem verItem in todos)
{DataTable dados = new DataTable();
dados = (DataTable)Session["table2"];
DataRow linha;
linha = dados.NewRow();
string horaInicio = verItem["Hora de Início"].ToString();linha["Data"] = horaInicio;
if (Label1.Text == "" || Label1.Text == "diferente")
{
if (DateTime.Parse(horaInicio) == DateTime.Parse(horaAgendar))
{
Label1.Text = "Escolha Outro Horário!!!";
gravarHora = false;
}
else
{
erro.Text = "diferente";
}
}dados.Rows.Add(linha);
Session["table2"] = dados;
GridView1.DataSource = dados;
GridView1.DataBind();}
if (gravarHora)
{
SPListItem item = lista.AddItem();
item["Mensagem"] = usuario + ":" + DropDownList1.SelectedItem.Text;
item["Hora de Início"] = ano + "/" + mes + "/" + dia + " " + DropDownList1.SelectedItem.Text + ":00";
item["Hora de Término"] = ano + "/" + mes + "/" + dia + " " + DropDownList1.SelectedItem.Text + ":00";
item.Update();
Response.Redirect("http://intranet/Lists/Agenda%20Massagem/calendar.aspx");
}
}}
});}
catch (Exception ex)
{
erro.Text = ex.Message;
}
}
Junior Santana
- Editado Jr_inc quarta-feira, 8 de fevereiro de 2012 19:32
-
Outra coisa, esses campos da lista
"Mensagem"] = usuario +":"+ DropDownList1.SelectedItem.Text;
item[
"Hora de Início"] = ano +"/"+ mes +"/"+ dia +" "+ DropDownList1.SelectedItem.Text + ":00";item[
"Hora de Término"] = ano +"/"+ mes +"/"+ dia +" "+ DropDownList1.SelectedItem.Text + ":00";São de que tipo? texto? data/hora ?
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
-
Outra coisa, esses campos da lista
"Mensagem"] = usuario +":"+ DropDownList1.SelectedItem.Text;"Hora de Início"] = ano +"/"+ mes +"/"+ dia +" "+ DropDownList1.SelectedItem.Text + ":00";
item[
"Hora de Término"] = ano +"/"+ mes +"/"+ dia +" "+ DropDownList1.SelectedItem.Text + ":00";São de que tipo? texto? data/hora ?
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
item[
Mensagem é Texto.
Os horários são Data/Hora.
Junior Santana
-
-
-
Junior,
Perguntei sobre a quantidade de usuários, pois você podia também customizar o nivel de permissão.
ex.: Os usuários do grupo X podem criar itens mas não podem remove-los.
Assim você nem precisaria mexer em codigo, será que resolve?
Abs,
-
Qual o usuário que tenta gravar ?
Outra coisa, voce tem um ambiente de desenvolvimento onde vc pode rodar pelo visual studio para poder debugar e ver exatamente onde está parando
?
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
-
Qual o usuário que tenta gravar ?
Outra coisa, voce tem um ambiente de desenvolvimento onde vc pode rodar pelo visual studio para poder debugar e ver exatamente onde está parando
?
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
é o usuário que está em verde (Controle Total), vou tentar ver no Debug.Junior Santana
-
Qual o usuário que tenta gravar ?
Outra coisa, voce tem um ambiente de desenvolvimento onde vc pode rodar pelo visual studio para poder debugar e ver exatamente onde está parando
?
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
Não consegui Debugar, deu essa msg:
Junior Santana
-
Junior, vamos lá.
Você esta desenvolvendo isso em VS 2010 certo?
Você tem um ambiente de desenvolvimento?
Você consegue montar um com as mesmas coisas do de produção?
Ja tentou por um try {} catch{} e cuspir a stack de erro?
Se é local, voce tem o sharepoint 2010 + vs 2010, dentro do projeto, é só dar F5.
Caso contrario, entra no meu blog ai e deixa um comentário com seu email, é moderado e aparece só pra mim, assim combinamos de fazer um acesso remoto para que eu possa ver... aproveita que estou com tempo.. rsrsr
depois postamos a resposta aqui. agora fazer isso na base da tentativa e erro vamos gerar 2000 respostas e não vamos resolver.
abraço!
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
-
Junior, vamos lá.
Você esta desenvolvendo isso em VS 2010 certo?
Você tem um ambiente de desenvolvimento?
Você consegue montar um com as mesmas coisas do de produção?
Ja tentou por um try {} catch{} e cuspir a stack de erro?
Se é local, voce tem o sharepoint 2010 + vs 2010, dentro do projeto, é só dar F5.
Caso contrario, entra no meu blog ai e deixa um comentário com seu email, é moderado e aparece só pra mim, assim combinamos de fazer um acesso remoto para que eu possa ver... aproveita que estou com tempo.. rsrsr
depois postamos a resposta aqui. agora fazer isso na base da tentativa e erro vamos gerar 2000 respostas e não vamos resolver.
abraço!
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
o Stack deu essa msg:
at Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx) at Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback) at Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents, String filename) at Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents, String filename) at Microsoft.SharePoint.SPListItem.Update() at MySuite.Agenda.AgendaUserControl.<button1_click></button1_click>b__0() at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass4.<runwithelevatedprivileges></runwithelevatedprivileges>b__2() at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(WaitCallback secureCode, Object param) at Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated secureCode) at MySuite.Agenda.AgendaUserControl.Button1_Click(Object sender, EventArgs e)
Junior Santana
-
Junior,
Caso sua web part seja sandbox, não é possível utilizar o recurso de RunWithElevatedPrivileges. Ainda acho que a melhor maneira é você realizar uma customização no nível de permissão e caso ainda seja necessário, criar sua webpart.
Até pq acho que a utilização do RunWithElevatedPrivileges deve ser somente em casos muito específicos.
Abs,
- Editado Rafael Fausto quinta-feira, 9 de fevereiro de 2012 13:48
-
Junior, vamos lá.
Você esta desenvolvendo isso em VS 2010 certo?
Você tem um ambiente de desenvolvimento?
Você consegue montar um com as mesmas coisas do de produção?
Ja tentou por um try {} catch{} e cuspir a stack de erro?
Se é local, voce tem o sharepoint 2010 + vs 2010, dentro do projeto, é só dar F5.
Caso contrario, entra no meu blog ai e deixa um comentário com seu email, é moderado e aparece só pra mim, assim combinamos de fazer um acesso remoto para que eu possa ver... aproveita que estou com tempo.. rsrsr
depois postamos a resposta aqui. agora fazer isso na base da tentativa e erro vamos gerar 2000 respostas e não vamos resolver.
abraço!
Abraço, Ivan Costa http://ivannw.wordpress.com twitter: @ivannw
Criei um projeto Web a parte, adicionei as Referências do SharePoint e compilei, no TryCath deu essa MSG:
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken) at Microsoft.SharePoint.SPSite..ctor(String requestUrl) at testes._Default.Button1_Click(Object sender, EventArgs e) in c:\users\temp.alusa.025\documents\visual studio 2010\Projects\testes\testes\Default.aspx.cs:line 123
using (SPSite site = new SPSite("http://intranet/"))
Junior Santana
-
Junior,
Caso sua web part seja sandbox, não é possível utilizar o recurso de RunWithElevatedPrivileges. Ainda acho que a melhor maneira é você realizar uma customização no nível de permissão e caso ainda seja necessário, criar sua webpart.
Até pq acho que a utilização do RunWithElevatedPrivileges deve ser somente em casos muito específicos.
Abs,
Rafael, eu até tentei, mas o nivel de permissão que deixa o usuário inclui na lista, abre muitas Opções nas Aba "Ações do Site"Junior Santana
-
Se você colocar um grupo de usuários com permissão para somente adicionar itens e visualizar itens na lista, ele não terá praticamente nenhuma opção no Ações do Site.
Caso você mesmo assim prefira utilizar o desenvolvimento, existe algum motivo para você não desenvolver uma web part? Pelo que entendi você está somente criando um projeto web. ASP.NET?
Abs,
-
Se você colocar um grupo de usuários com permissão para somente adicionar itens e visualizar itens na lista, ele não terá praticamente nenhuma opção no Ações do Site.
Caso você mesmo assim prefira utilizar o desenvolvimento, existe algum motivo para você não desenvolver uma web part? Pelo que entendi você está somente criando um projeto web. ASP.NET?
Abs,
Estou usando o Calendario do SharePoint para criar uma Agenda de Reservas, essa WebParts foi criada por que existem algumas regras e conexões com bd, que só consegui fazer no asp.net.
Vou tentar criar esse grupo.
Junior Santana
-
-
Junior, alguma novidade?
Nada ainda.
Tenho um Grupo no AD com todos os usuários, a principio eles estão na Lista com a permissão de "Leitura", mesmo quando add a permissão Adicionar e ver Itens da Lista, não dá acesso para eles inclui na lista.´Só da permissão quando coloco essa Permissão abaixo, mas ela abre muitas opções na Aba "Ações do Site"
Gerenciar Listas - Crie e exclua listas, adicione ou remova colunas em uma lista e adicione ou remova exibições públicas de uma lista
Junior Santana
-
-
-
-
Junior, mude a permissão e marque o adicionar e o editar itens na primeira imagem.
poste o resultado.
Ivan Costa http://ivannw.wordpress.com @ivannw
Esse erro:
at Microsoft.SharePoint.Utilities.SPUtility.HandleAccessDenied(Exception ex) at Microsoft.SharePoint.Library.SPRequest.AddOrUpdateItem(String bstrUrl, String bstrListName, Boolean bAdd, Boolean bSystemUpdate, Boolean bPreserveItemVersion, Boolean bUpdateNoVersion, Int32& plID, String& pbstrGuid, Guid pbstrNewDocId, Boolean bHasNewDocId, String bstrVersion, Object& pvarAttachmentNames, Object& pvarAttachmentContents, Object& pvarProperties, Boolean bCheckOut, Boolean bCheckin, Boolean bMigration, Boolean bPublish, String bstrFileName, ISP2DSafeArrayWriter pListDataValidationCallback, ISP2DSafeArrayWriter pRestrictInsertCallback, ISP2DSafeArrayWriter pUniqueFieldCallback) at Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents, String filename) at Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents, String filename) at Microsoft.SharePoint.SPListItem.Update() at MySuite.Agenda.AgendaUserControl.Button1_Click(Object sender, EventArgs e)
Junior Santana
-
Junior,
Do jeito que você está fazendo, todos os usuários com permissão de leitura poderão adicionar itens em listas e bibliotecas.
O correto é você criar seu próprio nivel de permissão a partir de um já existente.
E na tela que você mostrou, os usuários nem tinham permissão de adicionar e visualizar itens.
-
Junior,
Do jeito que você está fazendo, todos os usuários com permissão de leitura poderão adicionar itens em listas e bibliotecas.
O correto é você criar seu próprio nivel de permissão a partir de um já existente.
E na tela que você mostrou, os usuários nem tinham permissão de adicionar e visualizar itens.
Mas agora, mesmo colocando isso, ainda não esta dando certo.Junior Santana
-
Seguinte,
Você mandou o print das permissões do usuário com poder de leitura. Tem como você mandar um print das permissões da lista que você está usando na sua web part?
- Editado Rafael Fausto sexta-feira, 10 de fevereiro de 2012 17:18
-
Seguinte,
Você mandou o print das permissões do usuário com poder de leitura. Tem como você mandar um print das permissões da lista que você está usando na sua web part?
Quando abro as permissões da Lista, ele me traz as Permissões do Site Pai, como usarei tbm para outros cenarios, usu as permissões do pai.Junior Santana
-
Faz o seguinte teste.
1 - Cria um nível de permissão com o nome de colaborador customizado baseado no leitura, mas adiciona o adicionar itens e exibir itens.
2 - Crie um novo grupo com o nome de xpto.
3 - Coloque a permissão do grupo xpto como colaborador customizado
4 - Adicione um usuário no grupo xpto
5 - Pare a herança de permissão da lista e adicione o grupo xpto na lista, com o nivel de colaborador customizado.
6 - Manda um print da list
-
Bom pessoal... agradeço muito a ajuda de vcs todos.
Depois de muitas tentativas, consegui sanar esse problema alterando uma linha e adicionando outra, veja só:
Essa linha: using (SPSite site = new SPSite(“http://intranet/”))
Troquei por essa:
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
E adicionei essa:
web.AllowUnsafeUpdates = true;
Funcionou!!!!! Ufaaaaa
Abraços a todos.
Junior Santana
- Marcado como Resposta Jr_inc quinta-feira, 16 de fevereiro de 2012 13:47