---
id: object/page/9802
type: object
title: Page 9802 "Permission Sets"
summary: Page 9802 "Permission Sets" in Base Application (System.Security.AccessControl). 1 public procedures. Present since at least BC23, still in BC30, changed in BC24.
tier: official
language: en
tags:
  - page
  - base application
versions:
  introduced: null
  last_changed: "24"
  deprecated: null
review:
  state: derived
  by: null
  at: null
  flags: []
generated:
  at: "2026-10-11T00:31:51.816Z"
  pipeline: 0.2.0
  prompts: {}
  input_hash: acfca9c3d3d3dbce236746284d7d37a2d9dddf480feab976119eced7fa398c9c
evidence:
  - kind: code
    url: https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/System/Permissions/PermissionSets.Page.al
    title: src/Layers/W1/BaseApp/System/Permissions/PermissionSets.Page.al (releases/29.x)
    date: null
    commit: ea08af5ef2d6a9b5c5af4a029288abbe2c883220
    t: null
    quote: null
  - kind: learn
    url: https://learn.microsoft.com/dynamics365/business-central/ui-define-granular-permissions
    title: Define granular permissions
    date: null
    commit: null
    t: null
    quote: null
  - kind: learn
    url: https://learn.microsoft.com/dynamics365/business-central/ui-legacy-user-groups
    title: Manage permissions through user groups (legacy)
    date: null
    commit: null
    t: null
    quote: null
  - kind: learn
    url: https://learn.microsoft.com/dynamics365/business-central/ui-security-groups
    title: Control Access Using Security Groups
    date: null
    commit: null
    t: null
    quote: null
links:
  learn:
    - https://learn.microsoft.com/dynamics365/business-central/ui-define-granular-permissions
    - https://learn.microsoft.com/dynamics365/business-central/ui-legacy-user-groups
    - https://learn.microsoft.com/dynamics365/business-central/ui-security-groups
  objects: []
  features: []
  topics:
    - topic/business-central/development-and-administration/administration-tasks-in-business-central/manage-access-to-business-central
    - topic/business-central/development-and-administration/administration-tasks-in-business-central/manage-access-to-business-central/grant-user-permissions
    - topic/dev-itpro/development/troubleshooting/troubleshooting-in-the-client
    - topic/dev-itpro/integration/integrating-with-infrastructure-services
  localizations: []
  videos: []
  posts: []
  guidelines: []
  changes:
    - change/bcapps/11561
    - change/bcapps/8947
object_type: page
object_id: 9802
name: Permission Sets
namespace: System.Security.AccessControl
app: Base Application
extends: null
first_version: "23"
last_version: "30"
present_in:
  - "23"
  - "24"
  - "25"
  - "26"
  - "27"
  - "28"
  - "29"
  - "30"
changed_in:
  - "24"
source_major: "29"
obsolete: null
countries: []
ms_search_form_ids:
  - docs/learn-smb-docs/business-central/ui-define-granular-permissions.md
  - docs/learn-smb-docs/business-central/ui-legacy-user-groups.md
  - docs/learn-smb-docs/business-central/ui-security-groups.md
counts:
  fields: 0
  procedures: 6
  events: 0
  subscribers: 0
  controls: 7
  actions: 12
relations:
  out: 1
  referenced_by: 0
  pages: 0
  extended_by: 0
  event_subscribers: 0
  calls: 6
  called_by: 0
  implements: 0
---

# Page 9802 "Permission Sets"

> Page 9802 "Permission Sets" in Base Application (System.Security.AccessControl). 1 public procedures. Present since at least BC23, still in BC30, changed in BC24.

Base Application · System.Security.AccessControl · BC23-30 · [source at ea08af5e](https://github.com/microsoft/BCApps/blob/ea08af5ef2d6a9b5c5af4a029288abbe2c883220/src/Layers/W1/BaseApp/System/Permissions/PermissionSets.Page.al) · facts from BC29

## Properties

| Property | Value |
|---|---|
| Caption | Permission Sets |
| SourceTable | Permission Set Buffer |
| PageType | List |
| UsageCategory | Lists |
| ApplicationArea | Basic, Suite |
| Permissions | TableData "Permission Set Link" = rd, TableData "Aggregate Permission Set" = rimd |

## Fields on this page

Layout controls in source order, grouped by the container they sit in. Shows: the table field a control is bound to (or its expression as written); ToolTip: the control's own, else the bound field's (marked).

| Group | Control | Shows | ToolTip |
|---|---|---|---|
| Permission Set | Permission Set | [Role ID](../table/9009.md#fields) | Specifies the name of the permission set. <small>from the table field</small> |
|  | Name | [Name](../table/9009.md#fields) | Specifies the description of the record. <small>from the table field</small> |
|  | Type | [Type](../table/9009.md#fields) | Specifies if the permission set is defined by your organization, the base application, or an extension. You can only edit or delete permission sets that you have created. <small>from the table field</small> |
|  | Extension Name | [App Name](../table/9009.md#fields) | Specifies the name of the extension. <small>from the table field</small> |
| FactBoxes | Permissions | part [Page 9863 "Expanded Permissions Factbox"](../page/9863.md) | — |
|  | Included Permission Sets | part [Page 9849 "Included PermissionSet FactBox"](../page/9849.md) | — |
|  | Users | part [Page 9876 "Perm. Set Assignments Part"](../page/9876.md) | — |

## Actions

| Group | Action | ToolTip | Runs |
|---|---|---|---|
| Permissions | Permissions | View or edit which feature objects users need to access, and set up the related permissions in permission sets that you can assign to the users. |  |
|  | Permission Set by User | View or edit the available permission sets and apply permission sets to existing users. | [Page 9816 "Permission Set by User"](../page/9816.md) |
|  | Permission Set by Security Group | View or edit the available permission sets and apply permission sets to existing security groups. | [Page 9874 "Permission Set By Sec. Group"](../page/9874.md) |
|  | Show Permission Conflicts Overview | View the permission sets that provide more permissions than product licenses allow. | [Page 5555 "Permission Conflicts Overview"](../page/5555.md) |
|  | Show Permission Conflicts | View details about the permission set that provides more permissions than the license allows. |  |
| Security Groups | Security Groups | Set up or modify security groups as a fast way of giving users access to the functionality that is relevant to their work. | [Page 9871 "Security Groups"](../page/9871.md) |
| Permissions Overview | Where-Used | View where the selected permission set is used, including which users and security groups have been assigned with it. |  |
|  | Permissions Overview | View an overview of how permissions are distributed across permission sets, users, and security groups. |  |
| Functions | Copy Permission Set | Create a copy of the selected permission set with a name that you specify. |  |
|  | Import Permission Sets | Import a file with permissions. |  |
|  | Export Permission Sets | Export one or more permission sets to a file. |  |
|  | Remove Obsolete Permissions | Remove all permissions related to the objects which are obsolete or removed. |  |

## Procedures

- `GetSelectedRecords(var CurrSelectedRecords: Record "Permission Set Buffer")` (internal)

Plus 5 local procedures.

## Triggers

OnAfterGetCurrRecord, OnAfterGetRecord, OnDeleteRecord, OnInit, OnInsertRecord, OnModifyRecord, OnNewRecord, OnOpenPage

## Relations

- source table [Table 9009 "Permission Set Buffer"](../table/9009.md)

## Calls

From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an `Object::"Name"` argument. Interface dispatch and calls through events are not counted, so the list is not complete.

- [Codeunit 9001 "Permission Pages Mgt."](../codeunit/9001.md) (6 calls: `OnDeleteRecord → DisallowEditingPermissionSetsForNonAdminUsers`, `OnInsertRecord → DisallowEditingPermissionSetsForNonAdminUsers`, `OnInsertRecord → VerifyPermissionSetRoleID`, …)
- [Codeunit 425 "Data Compression"](../codeunit/425.md) (3 calls: `ExportMixedPermissionSets → AddEntry`, `ExportMixedPermissionSets → CreateZipArchive`, `ExportMixedPermissionSets → SaveZipArchive`)
- [Codeunit 4100 "Temp Blob"](../codeunit/4100.md) (2 calls: `ExportMixedPermissionSets → CreateInStream`, `ExportMixedPermissionSets → CreateOutStream`)
- [Codeunit 152 "User Permissions"](../codeunit/152.md) (1 call: `OnInit → CanManageUsersOnTenant`)
- [Codeunit 457 "Environment Information"](../codeunit/457.md) (1 call: `OnOpenPage → IsSaaS`)
- [Codeunit 9002 "Permission Manager"](../codeunit/9002.md) (1 call: `OnOpenPage → IsIntelligentCloud`)

## Recent changes

- 2026-09-23 [#11561 [Permissions] Fix read-only error in obsolete permission cleanup](../../changes/bcapps/11561.md) (main, BC30, fix)
- 2026-07-20 [#8947 [Permissions] Add Where-Used and Permissions Overview navigation actions](../../changes/bcapps/8947.md) (main, BC30, feature)

## Across versions

- Present in: BC23-30
- Changed (declaration) in: BC24

## Documented on Microsoft Learn

- [Define granular permissions](https://learn.microsoft.com/dynamics365/business-central/ui-define-granular-permissions)
- [Manage permissions through user groups (legacy)](https://learn.microsoft.com/dynamics365/business-central/ui-legacy-user-groups)
- [Control Access Using Security Groups](https://learn.microsoft.com/dynamics365/business-central/ui-security-groups)

Source: AL metadata extracted from the code (names, ids, signatures, properties); no code bodies (D10).

## Ask your agent

Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: `bcatlas_resolve_node(object_type: "page", object_name: "Permission Sets")`, then `bcatlas_get_procedure_body` or `bcatlas_get_neighbors` on the returned id.
