I'm working on a SharePoint 2010 publishing website where content authoring happens on an authoring site, e.g. http://authoring, and scheduled content deployment jobs deploy published content to a public site, e.g. http://public.

To simulate a staging environment, I would like users to be able to see checked in but not published content.

I know that members of the Visitors group can see published content. However, published content is also picked up by the next content deployment job.

Is there such a combination of permissions that allows people to view checked in but not published content, but not be able to edit it?


I do not believe that is possible. The normal path is Draft, Checked-in, published/approved. I don't see a way to let a group see the last one, but not the second one.

  • Mike, I just noticed something under Versioning Settings of Pages libraries. You can set "Who should see draft items in this document library?" to "Any user that can read items". This looks like it would do the trick, but I would have to programmatically set this for all my existing libraries, and modify my site definition to set it for new ones. Aug 30 '11 at 13:27
  • The key here would be to save the drafts then in the source, and not have them checked in or approved. It is possible to set the properties on libraries in bulk using powershell. you can iterate through all of the libraries. Aug 30 '11 at 13:29
  • Thanks Mike, I'll look into setting that property on the site definition level. If not, probably an event receiver on Site Created. Aug 30 '11 at 13:41

I ended up writing a script that set the appropriate draft visibility on every PublishingWeb in my site. Long term, I also need to add an event receiver that sets this property on each site as it is created.

Add-PSSnapin Microsoft.SharePoint.Powershell -ErrorAction:SilentlyContinue

$rootUrl = "http://localhost"
function SetDraftVisibilitySettings($rootUrl)
    $site = Get-SPSite -Identity $rootUrl
    #Walk through each PublishingWeb 
    $site | Get-SPWeb -limit all | ForEach-Object {
        #Check to see if site is a publishing site
        if ([Microsoft.SharePoint.Publishing.PublishingWeb]::IsPublishingWeb($_))
            write-host "Setting draft visibility in pages library in"$_.Title"site...."
            $publishingWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($_)
            $pagesListName = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPagesListName($publishingWeb.Web)
            #Set draft visibility to "Any users who can read items"
            $pagesList = $_.Lists[$pagesListName]
            $pagesList.DraftVersionVisibility = 0
  • There's a fatal flaw with this approach. End users on the site receiving the content deployment jobs will also see the draft items. The pages library settings are deployed along with content deployment... Aug 30 '11 at 21:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.