Site structure, permissions, and document-library reference for Microsoft SharePoint.
| Area | Concept | What it is | Notes |
|---|---|---|---|
| Sites | Team site | A collaboration site backed by a Microsoft 365 Group. Created automatically with every Team. | Membership is the Group's membership — manage it in Teams or Entra, not in SharePoint. |
| Sites | Communication site | A publishing site for broadcasting to a wide audience — no Group behind it. | Few authors, many readers. The right choice for an intranet or policy hub. |
| Sites | Hub site | A site others associate with, sharing navigation, branding, and rolled-up search. | Replaces the old subsite hierarchy. Use hubs, not subsites — see Gotchas. |
| Sites | OneDrive | A personal SharePoint site collection, one per user. | Which is why a leaver's OneDrive files vanish with their account unless transferred. |
| Content | Document library | A container for files with versioning, metadata columns, and permissions. | Not a folder. A library has schema; a folder is just nesting inside one. |
| Content | List | Structured rows and typed columns — tasks, issues, assets, contacts. | Effectively a lightweight database with a UI, and the basis for most Power Automate flows. |
| Content | Metadata column | A typed field on a library — status, owner, department, review date. | The alternative to deep folders. Filter and group by these instead of nesting. |
| Content | View | A saved filter/sort/group configuration over a library or list. | "My documents", "Pending review", "Expiring this month" — same content, different lenses. |
| Content | Content type | A reusable bundle of columns and a template — a "Contract" or "Invoice" definition. | Powerful in large deployments, overkill for a small team. Don't reach for it early. |
| Content | Versioning | Every save creates a version, restorable individually. | On by default for document libraries. Check it's on for lists — it often isn't. |
| Content | Check-out | Locks a file so only you can edit it until checked back in. | Largely obsoleted by co-authoring. A forgotten check-out blocks everyone — see Gotchas. |
| Automation | Power Automate | Flows triggered by list/library events — item created, file modified, column changed. | Turns a document library into an approval workflow with no code. |
| Automation | Alerts | Per-user email notifications on changes, immediate or as a digest. | Simpler than a flow when you just want to know something changed. |
| Automation | Sync / Add shortcut to OneDrive | Two ways to surface a library in File Explorer or Finder. | Prefer "Add shortcut" — it's more reliable and counts against the library's quota, not the user's. |
| Level | Can do | Typical use |
|---|---|---|
| Full Control | Everything, including permissions and site settings. | Site owners only. Keep this list very short. |
| Edit | Add, edit, delete items and lists themselves. | Broader than people expect — Edit can delete an entire library. |
| Contribute | Add, edit, delete items — but not lists or libraries. | Usually the right level for regular members, not Edit. |
| Read | View and download. | Consumers of published content. |
| View Only | View in browser without downloading. | Sensitive material where you want to reduce casual copying. |
- Grant to groups, never individuals. Access then follows membership rather than needing a manual edit per person.
- Keep inheritance intact wherever possible. If a subset needs different access, that's a signal it should be a different site or library.
- Never break inheritance at item level. It's technically possible and operationally miserable.
- Use Contribute rather than Edit for members — Edit includes deleting libraries.
- Check "Site settings → Site permissions → Check Permissions" to answer "what can this person actually see?" definitively.
- Watch the "Everyone except external users" group — it's genuinely everyone in the tenant, and it's easy to grant accidentally.
- Anyone — works without sign-in, forwardable, and untrackable. Disable this tenant-wide unless you have a specific need.
- People in your organisation — the sensible default for internal sharing.
- People with existing access — generates a link that grants nothing new. Safest option for "here's where that file is".
- Specific people — grants named individuals, and the link is useless to anyone else.
- Set link expiry and disable download for external sharing where the content warrants it.
- The tenant-level setting caps what site-level settings can allow — you cannot be more permissive than the tenant.
Add columns that describe the content
Library settings → Create column. Typical set: Status (choice), Owner (person), Department (choice), Review date (date). Choice columns beat free text — they stay consistent and filter cleanly.
Build views instead of folders
Create a view per way people actually look at the content: "My documents", "Awaiting approval", "Expiring in 30 days". Same files, filtered — no duplication, no deciding which folder something belongs in.
Make metadata required at upload
Set columns to required and users are prompted on upload. Optional metadata is empty metadata — this is the difference between a system that works and one that quietly degrades.
Use column formatting for visible status
Format a Status column with colour so "Overdue" is red at a glance. Library settings → the column → Format this column. No code needed for the built-in options.
Turn on versioning properly
Libraries version by default; lists often don't. Check both. Set a sensible version limit (500 is the default for libraries) so a heavily-edited file doesn't consume disproportionate storage.
Add approval only where it's genuinely needed
Power Automate → a "when a file is created" trigger with an Approval action turns a library into a review workflow. Worth it for policy documents; overkill for a working folder.
| Module | Command | What it does |
|---|---|---|
| Setup | Install-Module PnP.PowerShell -Scope CurrentUser | Install the PnP module. |
| Setup | Connect-PnPOnline -Url https://contoso.sharepoint.com/sites/X -Interactive | Connect to a site. -Interactive handles MFA properly. |
| Tenant | Connect-SPOService -Url https://contoso-admin.sharepoint.com | Connect the official module for tenant-level work. |
| Tenant | Get-SPOSite -Limit All | Select Url,StorageUsageCurrent,LastContentModifiedDate | Every site with storage and last-modified — the basis of any cleanup audit. |
| Tenant | Get-SPOTenant | Tenant-wide settings including external sharing policy. |
| Sites | Get-PnPWeb | Current site details. |
| Sites | Get-PnPList | Every list and library on the site, with item counts. |
| Content | Get-PnPListItem -List "Documents" -PageSize 500 | Enumerate items. Always page — large libraries will otherwise throttle. |
| Content | Get-PnPFile -Url "/sites/X/Shared Documents/f.docx" -AsFile -Path . | Download a file. |
| Content | Add-PnPFile -Path .\f.docx -Folder "Shared Documents" | Upload a file, optionally setting metadata in the same call. |
| Perms | Get-PnPGroup | SharePoint groups on the site. |
| Perms | Get-PnPListItem -List X | Get-PnPProperty -Property HasUniqueRoleAssignments | Finds broken inheritance — the audit that matters most. |
| Perms | Set-PnPListItemPermission -List X -Identity 1 -InheritPermissions | Restore inheritance on an item. |
| Audit | Get-PnPTenantSite | Where-Object {$_.SharingCapability -ne "Disabled"} | Every site permitting external sharing. |
| Audit | Get-PnPRecycleBinItem | Recycle bin contents — first stop when something "disappeared". |
Gotchas
- The full decoded path (site + library + folders + filename) has a limit around 400 characters. Deep nesting plus long filenames hits it.
- The symptom is confusing: sync fails, or a file can't be opened, with an error that doesn't mention path length.
- Certain characters are still problematic in names —
" * : < > ? / \ |— and leading/trailing spaces get stripped. - Another argument for flat libraries with metadata rather than folder trees.
- A library can hold millions of items, but a view that tries to return more than 5,000 at once fails.
- The fix is indexed columns plus views filtered to return fewer than the threshold — not splitting content into folders.
- Index a column before the library grows past the threshold; indexing afterwards is harder and sometimes needs a maintenance window.
- Modern SharePoint auto-indexes some columns, but don't rely on it for a library you know will grow large.
- Subsites are legacy. They inherit permissions in ways that become tangled, can't be moved, and complicate every migration.
- Use flat sites associated to a hub instead. Hubs give shared navigation and rolled-up search without the structural rigidity.
- A site can be re-associated to a different hub; a subsite cannot be promoted without a migration.
- If you inherit subsites, plan to flatten them rather than building more.
- A file checked out by someone on holiday is read-only to everyone else, with no obvious indication why.
- A site owner can force check-in: the file's ⋮ menu → More → Discard check-out. Unsaved changes in that check-out are lost.
- Co-authoring makes check-out unnecessary for most Office documents. Only require it where genuinely serialised editing matters.
- Deleted items go to the site recycle bin (typically 93 days), then to the second-stage bin, then are permanently removed.
- The second-stage bin is only visible to site collection administrators — users often report data as unrecoverable when it isn't.
- A deleted site also sits recoverable for a period, retrievable from the SharePoint admin centre.
- Retention policies in Purview override deletion — content under a hold is preserved even when users delete it.
Tips
"Add shortcut to OneDrive" is more reliable than the legacy Sync button, works across devices, and doesn't consume the user's OneDrive quota.
Not just Office documents. Right-click → Version history works on PDFs, images, and archives — restore or download any previous version.
Any list or library → ⋮ → Alert me. Immediate, daily, or weekly digest. Cheaper than a Power Automate flow when you only need to know something changed.
Turns a library into a spreadsheet for bulk metadata editing. Vastly faster than opening each file's properties pane.
SharePoint search supports KQL: filetype:pdf, author:"Jane", LastModifiedTime>2026-01-01. Far more precise than browsing.
Library settings → Restore this library rolls the entire library back to a point in time. The recovery path after a mass accidental delete or a ransomware event.