Loading...
Loading...
Compare original and translation side by side
.powerpages-site.powerpages-siteTaskCreatein_progresscompleted| Task subject | activeForm | Description |
|---|---|---|
| Verify site deployment | Verifying site deployment | Check .powerpages-site folder and table permissions exist |
| Gather configuration | Gathering configuration | Read web roles, table permissions, and site code |
| Run local schema validation | Validating local permissions schema | Run shared validator against existing table permission and site setting YAML |
| Discover relationships | Discovering relationships | Query Dataverse for lookup columns and relationships |
| Run audit checks | Running audit checks | Create per-table tasks and run checklist (A–K) for each table, then cross-validate |
| Generate audit report | Generating audit report | Create HTML report and display in browser |
| Present findings | Presenting findings | Summarize results, record usage, and offer to fix issues |
TaskCreatein_progresscompleted| 任务主题 | 活动表单 | 描述 |
|---|---|---|
| 验证站点部署 | 正在验证站点部署 | 检查是否存在.powerpages-site文件夹和表权限 |
| 收集配置信息 | 正在收集配置信息 | 读取Web角色、表权限和站点代码 |
| 运行本地架构验证 | 正在验证本地权限架构 | 对现有表权限和站点设置YAML运行共享验证工具 |
| 发现关系 | 正在发现关系 | 查询Dataverse中的查找列和关系 |
| 运行审计检查 | 正在运行审计检查 | 为每个表创建任务并运行检查表(A–K),然后进行交叉验证 |
| 生成审计报告 | 正在生成审计报告 | 创建HTML报告并在浏览器中显示 |
| 呈现结果 | 正在呈现结果 | 总结结果,记录使用情况,并提供修复问题的选项 |
Glob**/powerpages.config.json**/.powerpages-site/table-permissions/*.tablepermission.yml.powerpages-site/deploy-siteGlob**/powerpages.config.json**/.powerpages-site/table-permissions/*.tablepermission.yml.powerpages-site/deploy-site**/.powerpages-site/web-roles/*.ymlidnameanonymoususersroleauthenticatedusersrole**/.powerpages-site/web-roles/*.ymlidnameanonymoususersroleauthenticatedusersrole**/.powerpages-site/table-permissions/*.tablepermission.ymlentitynameentitylogicalnamescopereadcreatewritedeleteappendappendtoadx_entitypermission_webrolecontactrelationshipaccountrelationshipparententitypermissionparentrelationship**/.powerpages-site/table-permissions/*.tablepermission.ymlentitynameentitylogicalnamescopereadcreatewritedeleteappendappendtoadx_entitypermission_webrolecontactrelationshipaccountrelationshipparententitypermissionparentrelationship/_api/@odata.binduploadFileColumnuploadFileupload*Photoupload*Image$expand$expandbuildExpandClauseExpandOption.datamodel-manifest.json$expand/_api/@odata.binduploadFileColumnuploadFileupload*Photoupload*Image$expand$expandbuildExpandClauseExpandOption.datamodel-manifest.json$expand$schemaValidation = node "${CLAUDE_PLUGIN_ROOT}/scripts/validate-permissions-schema.js" --projectRoot "<PROJECT_ROOT>"errorwarninginfo$envUrl$schemaValidation = node "${CLAUDE_PLUGIN_ROOT}/scripts/validate-permissions-schema.js" --projectRoot "<PROJECT_ROOT>" --validate-dataverse-relationships --envUrl "$envUrl"$schemaValidation = node "${CLAUDE_PLUGIN_ROOT}/scripts/validate-permissions-schema.js" --projectRoot "<PROJECT_ROOT>"errorwarninginfo$envUrl$schemaValidation = node "${CLAUDE_PLUGIN_ROOT}/scripts/validate-permissions-schema.js" --projectRoot "<PROJECT_ROOT>" --validate-dataverse-relationships --envUrl "$envUrl"pac env whoEnvironment URLhttps://org12345.crm.dynamics.com$envUrlpac env whoEnvironment URLhttps://org12345.crm.dynamics.com$envUrlcreatewrite$lookups = node "${CLAUDE_PLUGIN_ROOT}/skills/audit-permissions/scripts/query-table-lookups.js" --envUrl "$envUrl" --table "<table_logical_name>"{ logicalName, targets }appendtotargetsappendorder_item[{ logicalName: "cr4fc_orderid", targets: ["cr4fc_order"] }]order_item → [{ column: "cr4fc_orderid", targets: ["cr4fc_order"] }]cr4fc_order → [{ sourceTable: "order_item", column: "cr4fc_orderid" }]appendto: truetargetsappend: truecreatewrite$lookups = node "${CLAUDE_PLUGIN_ROOT}/skills/audit-permissions/scripts/query-table-lookups.js" --envUrl "$envUrl" --table "<table_logical_name>"{ logicalName, targets }appendtotargetsappendorder_item[{ logicalName: "cr4fc_orderid", targets: ["cr4fc_order"] }]order_item → [{ column: "cr4fc_orderid", targets: ["cr4fc_order"] }]cr4fc_order → [{ sourceTable: "order_item", column: "cr4fc_orderid" }]appendto: truetargetsappend: true$rels = node "${CLAUDE_PLUGIN_ROOT}/skills/audit-permissions/scripts/query-table-relationships.js" --envUrl "$envUrl" --table "<parent_table>"{ schemaName, referencedEntity, referencingEntity, referencingAttribute }schemaNameparentrelationship$rels = node "${CLAUDE_PLUGIN_ROOT}/skills/audit-permissions/scripts/query-table-relationships.js" --envUrl "$envUrl" --table "<parent_table>"{ schemaName, referencedEntity, referencingEntity, referencingAttribute }schemaNameparentrelationshipcriticalwarninginfopasscriticalwarninginfopassTaskCreate:
subject: "Audit <table_logical_name>"
activeForm: "Auditing <table_display_name> permissions"
description: "Run all audit checks for <table_logical_name>"TaskCreate:
subject: "Compile audit findings"
activeForm: "Compiling audit findings"
description: "Combine all per-table findings into the final report"TaskListTaskCreate:
subject: "Audit <table_logical_name>"
activeForm: "Auditing <table_display_name> permissions"
description: "Run all audit checks for <table_logical_name>"TaskCreate:
subject: "Compile audit findings"
activeForm: "Compiling audit findings"
description: "Combine all per-table findings into the final report"TaskListin_progresscriticalMissing permission for <table>infoUnused permission for <table>passadx_entitypermission_webrolewarningPermission <name> has no web role associationpassgetCurrentContactId_contactid_valuecontactid_accountid_valueparentcustomerid756150000writedeletewarningGlobal scope with write/delete on <table>readpasswarningScope could be narrower for <table>passread/_api/<entity_set>list<TableName>get<TableName>read: falsecriticalMissing read permission for <table>read: trueread: truepasscreatemethod: 'POST'create<TableName>create: falsecriticalMissing create permission for <table>create: truecreate: trueinfoCreate enabled but not used for <table>createpasswritemethod: 'PATCH'update<TableName>uploadFileColumnuploadFileupload*Photoupload*Imageupload*Filewrite: falsecriticalMissing write permission for <table>write: truewrite: falsewarningFile upload detected but write is disabled on <table>write: truewrite: trueread: falsewarningWrite enabled without read on <table>read: truewrite: trueinfoWrite enabled but not used for <table>writepassdeletemethod: 'DELETE'delete<TableName>delete: falsecriticalMissing delete permission for <table>delete: truedelete: trueinfoDelete enabled but not used for <table>deletepassappend: truecreatewrite@odata.bind/<entity_set>(append: falsecriticalMissing append on <table><source_table><column>append: trueappend: truepassappend: trueinfoAppend enabled but not needed on <table>appendappendto: true@odata.bindcreatewriteappendto: falsecriticalMissing appendto on <table><column><target_table>appendto: trueappendto: truepass756150003parententitypermissionparentrelationshipcriticalBroken parent chain for <permission>pass$expand$expand$expandbuildExpandClauseExpandOptionread: truecriticalMissing read permission for expanded table <table>$expand<parent_table><service_file>read: truepasscompletedTaskUpdatein_progresscriticalMissing permission for <table>infoUnused permission for <table>passadx_entitypermission_webrolewarningPermission <name> has no web role associationpassgetCurrentContactId_contactid_valuecontactid_accountid_valueparentcustomerid756150000writedeletewarningGlobal scope with write/delete on <table>readpasswarningScope could be narrower for <table>passread/_api/<entity_set>list<TableName>get<TableName>read: falsecriticalMissing read permission for <table>read: trueread: truepasscreatemethod: 'POST'create<TableName>create: falsecriticalMissing create permission for <table>create: truecreate: trueinfoCreate enabled but not used for <table>createpasswritemethod: 'PATCH'update<TableName>uploadFileColumnuploadFileupload*Photoupload*Imageupload*Filewrite: falsecriticalMissing write permission for <table>write: truewrite: falsewarningFile upload detected but write is disabled on <table>write: truewrite: trueread: falsewarningWrite enabled without read on <table>read: truewrite: trueinfoWrite enabled but not used for <table>writepassdeletemethod: 'DELETE'delete<TableName>delete: falsecriticalMissing delete permission for <table>delete: truedelete: trueinfoDelete enabled but not used for <table>deletepassappend: truecreatewrite@odata.bind/<entity_set>(append: falsecriticalMissing append on <table><source_table><column>append: trueappend: truepassappend: trueinfoAppend enabled but not needed on <table>appendappendto: true@odata.bindcreatewriteappendto: falsecriticalMissing appendto on <table><target_table><column>appendto: trueappendto: truepass756150003parententitypermissionparentrelationshipcriticalBroken parent chain for <permission>pass$expand$expand$expandbuildExpandClauseExpandOptionread: truecriticalMissing read permission for expanded table <table><service_file><parent_table>$expandread: truepassTaskUpdatecompletedappendto: trueappend: trueappendto: trueappend: true$expandread: trueTaskListin_progressappendto: trueappend: trueappendto: trueappend: true$expandread: trueTaskListin_progresspowerpages.config.json<PROJECT_ROOT>/docs/permissions-audit.htmlpowerpages.config.json<PROJECT_ROOT>/docs/permissions-audit.htmlrender-audit-report.js<OUTPUT_DIR>/audit-data.json{
"SITE_NAME": "The site name (from powerpages.config.json or folder name)",
"AUDIT_DESC": "Security audit of table permissions for Contoso Portal",
"SUMMARY": "2-3 sentence summary of the audit results",
"FINDINGS_DATA": [/* array of finding objects */],
"INVENTORY_DATA": [/* array of current permission objects */]
}{
"id": "f1",
"severity": "critical",
"title": "Missing permission for cra5b_product",
"table": "cra5b_product",
"scope": null,
"permission": null,
"reasoning": "The table cra5b_product is referenced in src/services/productService.ts with GET requests to /_api/cra5b_products, but no table permission exists for this table.",
"fix": "Create a table permission with Global scope and read-only access for the Anonymous Users role.",
"details": "Referenced in: src/services/productService.ts (line 23), src/components/ProductList.tsx (line 45)"
}severitycriticalwarninginfopasstablenullscopenullpermissionnullreasoningfixnullpassdetails{
"name": "Product - Anonymous Read",
"table": "cra5b_product",
"scope": "Global",
"roles": ["Anonymous Users"],
"read": true,
"create": false,
"write": false,
"delete": false,
"append": true,
"appendto": false
}render-audit-report.js<OUTPUT_DIR>/audit-data.json{
"SITE_NAME": "站点名称(来自powerpages.config.json或文件夹名称)",
"AUDIT_DESC": "Contoso门户的表权限安全审计",
"SUMMARY": "审计结果的2-3句话摘要",
"FINDINGS_DATA": [/* 检查结果对象数组 */],
"INVENTORY_DATA": [/* 当前权限对象数组 */]
}{
"id": "f1",
"severity": "critical",
"title": "Missing permission for cra5b_product",
"table": "cra5b_product",
"scope": null,
"permission": null,
"reasoning": "The table cra5b_product is referenced in src/services/productService.ts with GET requests to /_api/cra5b_products, but no table permission exists for this table.",
"fix": "Create a table permission with Global scope and read-only access for the Anonymous Users role.",
"details": "Referenced in: src/services/productService.ts (line 23), src/components/ProductList.tsx (line 45)"
}severitycriticalwarninginfopasstablenullscopenullpermissionnullreasoningfixpassnulldetails{
"name": "Product - Anonymous Read",
"table": "cra5b_product",
"scope": "Global",
"roles": ["Anonymous Users"],
"read": true,
"create": false,
"write": false,
"delete": false,
"append": true,
"appendto": false
}node "${CLAUDE_PLUGIN_ROOT}/scripts/render-audit-report.js" --output "<OUTPUT_PATH>" --data "<DATA_JSON_PATH>"node "${CLAUDE_PLUGIN_ROOT}/scripts/render-audit-report.js" --output "<OUTPUT_PATH>" --data "<DATA_JSON_PATH>"Reference:${CLAUDE_PLUGIN_ROOT}/references/skill-tracking-reference.md
--skillName "AuditPermissions"参考:${CLAUDE_PLUGIN_ROOT}/references/skill-tracking-reference.md
--skillName "AuditPermissions"AskUserQuestion$expandAgent"Create table permissions for the following tables based on audit findings: <table1> needs Global scope with read:true; <table2> needs Parent scope under <parent_table> with read:true, create:true, append:true; <table3> needs appendto:true for lookups from <source_table>. The site project root is <PROJECT_ROOT>."/integrate-webapiAskUserQuestion$expandAgent"根据审计结果为以下表创建表权限:<table1>需要全局范围且read:true;<table2>需要在<parent_table>下的父范围且read:true, create:true, append:true;<table3>需要为来自<source_table>的查找启用appendto:true。站点项目根目录是<PROJECT_ROOT>。"/integrate-webapiquery-table-lookups.jsquery-table-relationships.jsInvoke-RestMethodgetAuthToken()query-table-lookups.jsquery-table-relationships.jsInvoke-RestMethodgetAuthToken()