---
title: "Permission sets"
manual: "Academic Base"
version: "main"
permalink: "https://docs.typo3.org/permalink/fgtclb/academic-base:integration-permission-sets@main"
source: "Integration/PermissionSets.rst"
rendered: "2026-10-26T19:20:13+00:00"
---

# Permission sets {#integration-permission-sets}

[b13/permission-sets](https://github.com/b13/permission-sets) keeps the
permissions of backend user groups in YAML files, so they are deployed with the
project instead of being clicked together per installation. This page lists
what an editor group needs for each academic extension: its tables, the fields
it adds to tables of TYPO3, its content types and its page types.

> [!NOTE]
> Written for b13/permission-sets 1.1.0 and checked against its
> source. The lists below are taken from the TCA of this release of the
> academic extensions. This repository does not install the package, so the
> files are not covered by a test.

-   [What a permission set grants](https://docs.typo3.org/permalink/fgtclb/academic-base:what-a-permission-set-grants@main)
-   [academic_persons](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-persons@main)
-   [academic_persons_edit](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-persons-edit@main)
-   [academic_contacts4pages](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-contacts4pages@main)
-   [academic_jobs](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-jobs@main)
-   [academic_bite_jobs](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-bite-jobs@main)
-   [academic_partners](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-partners@main)
-   [academic_programs](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-programs@main)
-   [academic_projects](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-projects@main)
-   [academic_study_plan](https://docs.typo3.org/permalink/fgtclb/academic-base:academic-study-plan@main)
-   [The other extensions](https://docs.typo3.org/permalink/fgtclb/academic-base:the-other-extensions@main)

## What a permission set grants {#integration-permission-sets-format}

A permission set is a YAML file in `Configuration/PermissionSets/` of an
extension, or in `config/permission-sets/` of the project. It is selected
in the field **Permission Sets** of a backend user group, and adds to
what the group grants by itself:

| In the file | Adds to the backend user group |
| --- | --- |
| `resources.<table>.permissions: ['read', 'write']` | **Tables (listing)** and **Table permissions** |
| `resources.<table>.fields: '*'` | Every field of the table that TCA marks as `exclude`, as **Allowed fields** |
| `resources.<table>.fields: [...]` | The fields listed, as **Allowed fields** |
| `resources.pages.types: [...]` | **Allowed page types** |
| `resources.tt_content.types: [...]` | The content types, as **Explicitly allow field values** |

A field that is not an `exclude` field is editable for every group that may
edit its table, so the lists below name the `exclude` fields only. The
fields of the tables of an extension are granted with `'*'`, which follows the
TCA of the installed version.

The examples grant what an extension adds. The set the project uses for its
editors in general has to grant the rest, which the academic extensions rely
on as well:

-   The tables `pages` and `tt_content` themselves, and the
    database mounts.
-   The field `categories` of `pages` and the table
    `sys_category`. Programs, projects and partners are filtered by the
    categories of their pages, and TYPO3 makes every field of the type
    `category` an `exclude` field.
-   The table `sys_file_reference`, for profile images and the media of
    program, project and partner pages.

## academic_persons {#integration-permission-sets-persons}

The field of `fe_users` links a frontend user to the profiles it may edit
with **EXT:academic_persons_edit**.

```yaml
label: 'Academic persons'
resources:
  fe_users:
    fields:
      - tx_academicpersons_profiles
  tt_content:
    types:
      - academicpersons_list
      - academicpersons_listanddetail
      - academicpersons_detail
      - academicpersons_card
      - academicpersons_selectedprofiles
      - academicpersons_selectedcontracts
  tx_academicpersons_domain_model_profile:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_contract:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_address:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_email:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_phone_number:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_location:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_organisational_unit:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_function_type:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpersons_domain_model_profile_information:
    permissions: ['read', 'write']
    fields: '*'
```

## academic_persons_edit {#integration-permission-sets-persons-edit}

```yaml
label: 'Academic persons: frontend editing'
resources:
  tt_content:
    types:
      - academicpersonsedit_profileediting
```

## academic_contacts4pages {#integration-permission-sets-contacts4pages}

The extension adds a field to `pages` and one to the contracts of
**EXT:academic_persons**.

```yaml
label: 'Academic contacts for pages'
resources:
  pages:
    fields:
      - tx_academiccontacts4pages_contacts
  tt_content:
    types:
      - academiccontacts4pages_list
  tx_academicpersons_domain_model_contract:
    fields:
      - tx_academiccontacts4pages_contacts
  tx_academiccontacts4pages_domain_model_contact:
    permissions: ['read', 'write']
    fields: '*'
  tx_academiccontacts4pages_domain_model_role:
    permissions: ['read', 'write']
    fields: '*'
```

## academic_jobs {#integration-permission-sets-jobs}

```yaml
label: 'Academic jobs'
resources:
  tt_content:
    types:
      - academicjobs_newjobform
      - academicjobs_list
      - academicjobs_detail
  tx_academicjobs_domain_model_job:
    permissions: ['read', 'write']
    fields: '*'
```

## academic_bite_jobs {#integration-permission-sets-bite-jobs}

```yaml
label: 'Academic B-ITE jobs'
resources:
  tt_content:
    types:
      - academicbitejobs_list
```

## academic_partners {#integration-permission-sets-partners}

A partner is a page of the page type 40, and its description is the field
`description` of TYPO3, which EXT:seo renders as the meta description.
The other fields the extension defines on `pages` are not
`exclude` fields, and the column `link` it adds on TYPO3 v13 is
shown in no form.

```yaml
label: 'Academic partners'
resources:
  pages:
    types: [40]
    fields:
      - description
      - tx_academicpartners_partnerships
  tt_content:
    types:
      - academicpartners_list
      - academicpartners_map
      - academicpartners_partnershipslist
      - academicpartners_partnershipsteaser
  tx_academicpartners_domain_model_partnership:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicpartners_domain_model_role:
    permissions: ['read', 'write']
    fields: '*'
```

## academic_programs {#integration-permission-sets-programs}

A program is a page of the page type 20, and none of its fields on
`pages` is an `exclude` field.

```yaml
label: 'Academic programs'
resources:
  pages:
    types: [20]
  tt_content:
    types:
      - academicprograms_programlist
      - academicprograms_programdetails
      - academicprograms_programfinder
```

## academic_projects {#integration-permission-sets-projects}

A project is a page of the page type 30.

```yaml
label: 'Academic projects'
resources:
  pages:
    types: [30]
    fields:
      - tx_academicprojects_project_title
      - tx_academicprojects_short_description
      - tx_academicprojects_start_date
      - tx_academicprojects_end_date
      - tx_academicprojects_budget
      - tx_academicprojects_funders
  tt_content:
    types:
      - academicprojects_projectlist
      - academicprojects_projectlistsingle
```

## academic_study_plan {#integration-permission-sets-study-plan}

The two fields the extension adds to `tt_content` are not `exclude`
fields.

```yaml
label: 'Academic study plan'
resources:
  tt_content:
    types:
      - academic_study_plan
  tx_academicstudyplan_domain_model_semester:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicstudyplan_domain_model_module:
    permissions: ['read', 'write']
    fields: '*'
  tx_academicstudyplan_domain_model_category:
    permissions: ['read', 'write']
    fields: '*'
```

## The other extensions {#integration-permission-sets-others}

**EXT:academic_base**, **EXT:academic_persons_sync** and
**EXT:category_types** add no table, no content type and no
`exclude` field. The field `type`, which
**EXT:category_types** adds to `sys_category`, is editable for
every group that may edit categories.
