| 02-permissions |
04 |
export |
| csv |
| html |
| permissions |
| export |
| csom |
| rfc4180 |
|
| phase |
provides |
| 02-permissions plan 02 |
PermissionEntry record type and stub export service classes |
|
|
| CsvExportService |
| merges PermissionEntry rows by (Users, PermissionLevels, GrantedThrough) and writes RFC 4180 CSV with UTF-8 BOM |
|
| HtmlExportService |
| generates self-contained interactive HTML report with inline CSS/JS, stats cards, badges, and user pills |
|
|
| 02-permissions (plans 05-07 may call these services) |
| Phase 3+ (any feature using CSV or HTML permission exports) |
|
| added |
patterns |
|
|
| GroupBy merge pattern: group PermissionEntry by composite key then pipe-join distinct URLs/Titles |
| Self-contained HTML: all CSS and JS inline in StringBuilder output — no external file references |
| RFC 4180 CSV escaping: every field double-quoted, internal quotes doubled |
| External user detection: #EXT# substring check applied to UserLogins for CSS class annotation |
|
|
| created |
modified |
|
|
| SharepointToolbox/Services/Export/CsvExportService.cs |
| SharepointToolbox/Services/Export/HtmlExportService.cs |
|
|
| CsvExportService uses UTF-8 with BOM (encoderShouldEmitUTF8Identifier=true) for Excel compatibility |
| HtmlExportService uses UTF-8 without BOM for HTML files (standard browser expectation) |
| HtmlEncode helper implemented inline rather than using System.Web.HttpUtility to avoid WPF dependency issues |
| User pills zip UserLogins and Users arrays by index position to associate login with display name |
|
| Export services accept IReadOnlyList<PermissionEntry> — no direct file system coupling in BuildXxx methods |
| WriteAsync wraps BuildXxx for testability — BuildXxx returns string, WriteAsync does I/O |
|
|
1min |
2026-04-02 |