SharePoint: Smart Document Review and Approval System
Learn how to build a smart document review and approval system in SharePoint using content types, Power Automate, approval logs, versioning, and security groups. A step‑by‑step lab approach to creating a structured, auditable knowledge base.
One of the recurring challenges in IT teams is knowledge management. Everyone wants a central knowledge base, but without structure it quickly becomes a dumping ground of half-finished drafts, outdated notes, and pages that no one trusts.
In this lab, I set out to build a smart document review and approval system in SharePoint something that enforces a proper lifecycle for Knowledge Base (KB) content, while still being lightweight enough for authors to use without friction.
The Lab Goal
- Authors should be able to create KB pages using pre-defined templates.
- Approvers should have a clear workflow to review and approve content.
- Published content should be separated from work-in-progress.
- Every approval should leave behind an audit trail (approval log).
To achieve this, I combined SharePoint content types, Power Automate flows and security groups into a single solution.
This lab is also available on YouTube, see Part 1 and Part 2 (coming soon).
Creating the Solution
In eight steps I'll show you how to create this solution:
Step 1: Setting Up Your SharePoint Site
Before building the knowledge base solution, we'll need a dedicated SharePoint site to host the pages, templates, lists, and workflows. For this solution, I used a site type of communication site.
How to Create a Modern SharePoint Site
- Go to the
SharePoint admin center > Active Sites - Click
Createand choose theTypeof site - Choose a
Template(for this solution, I choose aBlanktemplate) - Enter a
site detailsincluding a set a site owner and clickFinish
Step 2: Setting Site Permissions
A well-structured knowledge base isn’t just about content, it’s also about control. I wanted to ensure that only the right people can create, edit, approve, and publish pages, while others can simply view the approved content. In this step, I defined a clear permission model for your SharePoint site.
How to set Permissions for a Modern SharePoint Site
- Go to the
SharePoint admin center > Active Sites - Choose your site and in the right hand pane that appears, choose
Membership
SharePoint Site Roles Explained
Site Admin Has full control over all sites in the tenant, including settings, policies, and access. Responsible for managing site collections, global configurations, and compliance policies.
Site Owner Has full control of the individual site, including content, structure, permissions, and features. Typically creates content types, manages lists and libraries, and configures Power Automate flows.
Site Member Granted edit permissions: can add, edit, and delete content within the site. Ideal for authors and contributors who create pages, update lists, and collaborate on documents.
Site Visitor Has read-only access: can view pages and documents but cannot make changes. Best suited for general users who consume approved content from the knowledge base.
I recommend using security groups to simplify how access is managed across the site. By assigning permissions to groups instead of individual users, it makes it easier to scale as my teams grow or change. These are the security groups that I created for this solution:
kb.Owners Administrators who manage the site, Power Automate flows, and overall structure. They have full control as Site Owners and are responsible for governance and configuration. This group is added to the Site Owners SharePoint permission.
kb.Automation A service principal group used to execute automation flows independently of individual users. Assigned Site Member permissions to run flows and maintain stability across the solution. This group is added to the Site Members SharePoint permission.
kb.Authors Content creators who draft and submit KB Pages for review. They have Site Member permissions, allowing them to create and edit content but not publish. This group is added to the Site Members SharePoint permission.
kb.Approvers Reviewers who evaluate and approve or reject KB Pages. They are given Site Visitor permissions, enabling them to view content and respond to approval requests. This group is added to the Site Visitors SharePoint permission.
kb.Users General consumers of published KB content. They have Site Visitor permissions and can only view approved pages surfaced on the home page. This group is added to the Site Visitors SharePoint permission.
Using a Service Principle for Automation
To manage automation independently of individual users, I created a dedicated user account named srv.kb.Automation, which acts as a service principal. While it functions like any standard user account, its sole purpose is to own and run all Power Automate flows tied to this solution. By assigning it an E3 or E5 license, the account has access to Microsoft 365 apps, including Power Automate which covers most SharePoint automation needs.
Since this account isn’t tied to any one person, workflows do not break if team members leave the organisation.
Step 3: Enabling Versioning for the Site Pages Library
I turned on major versioning for the Site Pages library. This means every time a page is saved, a new version is created. Combined with the approval metadata and the Approval Log, this gives us a complete picture of a page’s lifecycle, from first draft through to final publication. The two main reasons for this solution were:
- Authors can roll back if they make a mistake.
- Approvers can see what’s changed between drafts.
How to enable major versioning on libraries
- Go to the
Library (for this solution, Site Pages) - Click on the
Settings cogand chooseLibrary Settings > More Library Settings - Choose a
Versioning Settings - Choose
Create major versionsand in theVersion count limitbox enter the number of versions to be stored - Click
Save
Step 4: Defining the KB Page Content Type
What’s a Content Type?
In modern SharePoint, a content type is a way of giving structure and meaning to pages. For example, in this solution the KB Page content type ensures that every knowledge base article has a status, a category and type that are required fields and an approval log link and date that are optional.
I started by creating a new content type called KB Page. This gave me a structured way to enforce metadata on every page:
- Page Status -
ChoiceDraft (default and required), In Review, Approved, Cancelled - Page Type -
Choice(required) like FAQ (matches page templates, authors can add more categories)) - Page Category
Choice(required) - like Networking (authors can add more categories) - Approval Date -
Dateauto-populated by Power Automate after approval - Approval Log -
Hyperlinkpointing to a filtered view of the approval log list for that page (auto-populated by Power Automate)
How to create a new content type in modern SharePoint
- Go to
SharePoint Admin Center > Content services > Content type gallery > Create Content Type. - Fill in the details (choose
Parent Category: Document Content TypesandContent Type: Site Page) and clickCreate - Now add
Site columns(metadata). For this solution, use the columns above. - Click on
Publishto make it available to all sites in your SharePoint tenant. - Before you can add the columns from your content type to your Site Pages document library, you need to add the content type to the library. Go to the
Site Pages > Add Column > Add a column type > Choose the content type from the dropdown box and apply. - Now when you try to
add columnsto your Site Pages library, the columns from your content type will appear.
Step 5: Creating Page Templates
Next I created page templates that match the types of content that might be published. Templates help authors start with the right layout, metadata, and structure reducing guesswork and ensuring consistency.
For this solution, I created three reusable templates tailored to common IT knowledge base needs:
- FAQ Page - For answering common questions with clear, concise responses
- How To Guide Page - For step-by-step instructions on completing tasks or using systems
- Troubleshooting Page - For diagnosing and resolving known issues
How to Create a Page Template
- Go to your
Site Pageslibrary. - Create a new page using the appropriate
content type(in this caseKB Page). - Add the layout, web parts, and placeholder text that suit the template’s purpose.
- Fill in the metadata fields with sample or default values.
- Click
Save as templatefrom the page menu. - Give the template a clear name (like 'FAQ Template') and save.
Now, when authors create a new page, they can choose from these templates which are pre-configured to guide the writing process and enforce metadata standards.
Step 6: Building the Approval Log List
To track review decisions and maintain a clear audit trail, l created a SharePoint List. This list will store metadata about each page review, including who approved it, when, and what they said.
How to Create a SharePoint List
- Go to your
sitein SharePoint - Choose
Site contents - Click
New> selectList - Choose
Blank listand give it a name (in this case,KB Pages Approval Log) - Click
Create
Approval Log List Columns
Page ID (number) The ID for the page being reviewed. This will link the log entry to the specific Site Page.
Page Title (system column 'Title') The title of the page that was submitted for approval.
Page Link (hyperlink) A direct hyperlink to the page in the Site Pages library, allowing quick access from the log.
Approver Name (Text) The name of the individual responsible for reviewing and approving the page.
Approval Status (Text) The outcome of the review process: Approved, Rejected, or Cancelled.
Review Date (system column 'Created') The date when the review or approval action was completed.
Review Comments (Multi-line Text) Any notes or feedback provided by the approver during the review, captured in a multi-line text field.
Approver Email (Text) Email of approver.
The log will be automatically populated by Power Automate during the approval process. Authors don’t touch it, it’s purely for governance and traceability.
Step 7: The Frontend for visitors and Admins
With all the functional components in place, the final step was designing a user-friendly interface for two key audiences:
- Visitors: who read approved knowledge base pages
- Admins: who author and manage those pages
Home Page (for Visitors)
Since the site was built from a blank template, the home page started as a clean slate. I added two key web parts to make it both informative and intuitive:
- Editorial Card Serves as a visual header and includes a button for Admins to navigate to the authoring dashboard.
- Document Library Displays a formatted view of the Site Pages library, filtered to show only pages with an Approved status. This ensures visitors only see content that’s been reviewed and published.
AdminHome Page (for Authors)
This page mirrors the structure of the Home Page but is tailored for Page authors. It includes:
- Editorial Card Serves as a visual header and includes a button to create a new KB Page using the url:
https://NameOfTenant.sharepoint.com/sites/NameOfSite/_layouts/15/createpagefromtemplate.aspx - Document Library Shows a filtered view of Site Pages that are not approved, including drafts, pages in review, and cancelled items and Content Type equal to KB Page. This gives authors a clear overview of what’s in progress and helps them track pending approvals or revisions.
This page is only intended for authors to view, so I also changed the permissions to this page only:
Site Pages Library > AdminHome (click on the 3 dots) > Manage Access > Advanced Settings
Here I removed all permissions and then gave Full Control permissions to the kb.Owners group and Edit permissions to the kb.Authors and kb.Automation groups.
Using a VPN is a secure and simple way to protect your data.
Step 8: Automating the Workflow using Power Automate
When a document author creates a new page, a page template is used and the page properties are filled out (Page Status defaults to Draft, along with Page Type and Category).
The author works on the document and when ready for review, changes the Page Status to In Review.
A flow in Power Automate named StartKbPageApproval was created by logging in to the srv.kb.Automation account to handle the approval workflow:
Trigger: When an item or a file is modified (SharePoint)
- The flow monitors the Site Pages library.
- It runs every minute.
- Trigger conditions are used so the flow only fires when:
- The content type is KB Page.
@equals(triggerOutputs()?['body/{ContentType}/Name'], 'KB Page')
- The Page Status field has just transitioned into In Review (current value = In Review, previous value ≠ In Review).
@and( equals(triggerOutputs()?['body/KB_x0020_Page_x0020_Status']?['Value'], 'In Review'), not(equals(triggerOutputs()?['body/KB_x0020_Page_x0020_Status@previousValue'], 'In Review')) )
- This prevents duplicate runs caused by general edits or republish actions.
Actions:
Action: Initialize variable
- Creates an empty string variable called Get Approver Emails.
- This acts as a placeholder to collect the email addresses of approvers, which are appended later depending on whether the page is a fresh submission or a resubmission.
Action: Get Items (SharePoint)
- Checks the Approval Log list for any entries where this PageID has a “Rejected” status.
- If no rejections are found, the flow will gather approvers from the security group.
- If the page is being resubmitted after rejection, it reuses the original approvers from the log.
Control [Condition]: Build approver email list
- Purpose: Populate the Get Approver Emails variable based on whether the page is a fresh submission or a resubmission after rejection.
- Logic:
- If no rejected entries exist for this PageID (fresh submission):
- Action: List group members (Office 365 Groups) from kb.Approvers security group
- For Each: (member)
- Action: Append to string variable: Add each member’s email (semicolon‑separated).
- Else (resubmission after a rejection exists):
- For Each: (Approval Log items)
- Action: Append to string variable: Add email (semicolon‑separated)
Action: Start and Wait for an Approval
- Sends an approval request to all approvers.
- Uses the CustomResponseAwaitAll type, meaning all approvers must respond before the flow continues.
- Provides details such as the page title, a link to the page, and response options (Approved, Rejected, Cancelled).
- Waits until every approver responds before moving forward.
For Each (Response)
- Iterates through all responses received.
- Action: Create Item (SharePoint)
- Records each approver’s name, decision, comments, and email into the Approval Log list, along with page details.
Action: Update File Properties (SharePoint)
- Updates the page’s metadata to include a link to its Approval Log entries based on Page ID.
- This ensures authors and admins can easily view the full approval history.
Control [Switch]: Based on Approval Outcome
- If Approved (all approvers approved):
- Action: Update File Properties (SharePoint)
- Updates the page’s status to Approved.
- Sets the approval date from the approval outcome.
- If Rejected (any approver rejects):
- Action: Update File Properties (SharePoint)
- Updates the page’s status back to Draft, requiring the author to make changes based on approver comments.
- When author makes changes and puts page back in status 'In Review', only approvers that rejected get sent an approval request.
- If Cancelled (any approver cancels):
- Action: Update File Properties (SharePoint)
- Updates the page’s status to Cancelled.


Testing the Solution
Once the system was fully built, I ran a series of tests to validate each component:
Page Creation and Metadata
- Created pages using each of the four templates (FAQ, How-To, Troubleshooting, Configuration Guide).
- Verified that required metadata fields (Status, Type, Category) were enforced and saved correctly.
Frontend Experience
- Viewed the Home Page as a visitor and confirmed only approved pages were visible.
- Navigated to the AdminHome Page and verified that authors could see all non-approved pages with clear status indicators.
Approval Workflow
- Submitted pages for review by changing the status to "In Review".
- Confirmed that Power Automate triggered the approval flow and sent requests to the
kb.Approversgroup. - Tested all response paths: Approved, Rejected, and Cancelled and verified that page status updated accordingly.
Approval Log
- Checked that each approval decision was logged in the Approval Log list with correct metadata.
- Verified that the log entries linked back to the original page and included reviewer comments.
Conclusion
This lab showed me how far you can push SharePoint with just content types, lists, and Power Automate. By layering in a service principal and security groups, the solution becomes robust enough for production use.
The result is a smart document review and approval system that balances flexibility for authors with governance for approvers, exactly what a growing IT team needs to keep knowledge organised and trustworthy.
If you'd like to support my work, show your appreciation!
Comments ()