Hei.
Jeg oppretter en ny side og ønsker å legge til en eksisterende buker som skal ha publisering og redigeringsrettigheter for siden. Jeg har prøvd følgende:
newPage.Property["PersonId"].Value=txtPersonId.Value;
newPage.Property["PageExternalURL"].Value=_user.Name;
newPage.Property["PersonalPage"].Value = NewPersonalPage(txtPersonId.Value,sid);
newPage.ACL.Add(_user.ID, EPiServer.Security.AccessLevel.Publish);
Global.EPDataFactory.Save(newPage,EPiServer.DataAccess.SaveAction.Publish);
Brukeren får ingen rettigheter på siden.
Magne Johansen
ACL sparas inte tillsammans med sidan på samma sätt som bl.a. dynamiska egenskaper inte sparas. Enklaste sättet att läsa ut den sparade sidan igen och sedan använda ACL.Save.
Kan Per ge ett bättre exempel. Jag har ett liknande fall och har försökt samma sak. ACL.Save kan jag inte hitta annat än i klassen PageAccessControlList men kan inte se hur jag ska använda den.
Site där detta ska implementeras är en EPi 4.22 och i den versionen verkar inte ACL.Save() vara införd. Finns det någon annan väg runt detta (Uppgradering till 4.3 eller 4.4 är inte planerad förrän första kvartalet 2005)
Hei
Jeg gjør som i eksempelet men får:
INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_tblACL_tblPage' ....
Jeg gjør ACL-endring ved Global.EPDataFactory.CreatedPage
Hi, I get the exact same exception as above. Anyone who knows how to solve this or work around it? I am using asp.net 2.0 with EPiServ 4.61.
Thankful for any input at all :)
/Niklas Furberg
Hi,
I found out how to do this. What you need to do is to save the page first, and then get the latest version with accesslevel to NoAccess, then save the new ACL-right to the page.
Global.EPDataFactory.Save(page, EPiServer.DataAccess.SaveAction.CheckIn, AccessLevel.Read);
PageData latestVersion = GetLatestVersion(page.PageLink);
SetAccessLevel(latestVersion, user);
public static PageData GetLatestVersion(PageReference pageRef)
{
PageVersionCollection pvc = PageVersion.List(pageRef);
if (pvc.Count != 0)
{
PageReference savedVersionRef = pvc[pvc.Count - 1].ID;
PageData CurrentPageVersion = Global.EPDataFactory.GetPage(savedVersionRef, AccessControlList.NoAccess);
return CurrentPageVersion ?? null;
}
else
return null;
}
private static void SetAccessLevel(PageData page, UnifiedPrincipal user)
{
if (!page.ACL.Exists(user.Sid))
{
page.ACL.Add(user.Sid, AccessLevel.Read | AccessLevel.Edit | AccessLevel.Publish | AccessLevel.Delete);
page.ACL.Save();
}
}
Hope this will help you guys (most likely new people since the question is quite old :)
Kjetil Simensen
newPage.Property["PersonId"].Value=txtPersonId.Value; newPage.Property["PageExternalURL"].Value=_user.Name; newPage.Property["PersonalPage"].Value = NewPersonalPage(txtPersonId.Value,sid); newPage.ACL.Add(_user.ID, EPiServer.Security.AccessLevel.Publish); Global.EPDataFactory.Save(newPage,EPiServer.DataAccess.SaveAction.Publish);
Brukeren får ingen rettigheter på siden. Magne Johansen