CINXE.COM
Administration panel - Turn-key research data management repository
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="canonical" href="https://inveniordm.docs.cern.ch/develop/topics/administration_panel/"> <link rel="prev" href="../theming/"> <link rel="next" href="../../howtos/i18n/"> <link rel="icon" href="../../../images/favicon.svg"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.40"> <title>Administration panel - Turn-key research data management repository</title> <link rel="stylesheet" href="../../../assets/stylesheets/main.8c3ca2c6.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css"> <link rel="stylesheet" href="../../../stylesheets/extra.css"> <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> </head> <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#administration-panel" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <header class="md-header" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="../../.." title="Turn-key research data management repository" class="md-header__button md-logo" aria-label="Turn-key research data management repository" data-md-component="logo"> <img src="../../../images/logo-rdm.png" alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> Turn-key research data management repository </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> Administration panel </span> </div> </div> </div> <form class="md-header__option" data-md-component="palette"> <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0"> <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="orange" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1"> <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> <div class="md-header__source"> <a href="https://github.com/inveniosoftware/docs-invenio-rdm" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class="md-source__repository"> GitHub </div> </a> </div> </nav> </header> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href="../../.." class="md-tabs__link"> Home </a> </li> <li class="md-tabs__item"> <a href="../../../features/" class="md-tabs__link"> Features </a> </li> <li class="md-tabs__item"> <a href="../../../install/" class="md-tabs__link"> Install </a> </li> <li class="md-tabs__item"> <a href="../../../customize/" class="md-tabs__link"> Customize </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="../../" class="md-tabs__link"> Develop </a> </li> <li class="md-tabs__item"> <a href="../../../deploy/" class="md-tabs__link"> Deploy </a> </li> <li class="md-tabs__item"> <a href="../../../reference/" class="md-tabs__link"> Reference </a> </li> <li class="md-tabs__item"> <a href="../../../releases/" class="md-tabs__link"> Releases </a> </li> <li class="md-tabs__item"> <a href="../../../maintenance/" class="md-tabs__link"> Maintainers </a> </li> <li class="md-tabs__item"> <a href="../../../contribute/" class="md-tabs__link"> Onboard & Contribute </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="../../.." title="Turn-key research data management repository" class="md-nav__button md-logo" aria-label="Turn-key research data management repository" data-md-component="logo"> <img src="../../../images/logo-rdm.png" alt="logo"> </a> Turn-key research data management repository </label> <div class="md-nav__source"> <a href="https://github.com/inveniosoftware/docs-invenio-rdm" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg> </div> <div class="md-source__repository"> GitHub </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../.." class="md-nav__link"> <span class="md-ellipsis"> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-ellipsis"> Features </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Features </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../features/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/ux/" class="md-nav__link"> <span class="md-ellipsis"> Beautiful UX </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/scalable/" class="md-nav__link"> <span class="md-ellipsis"> Highly scalable </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/customization/" class="md-nav__link"> <span class="md-ellipsis"> Customizable </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/interoperable/" class="md-nav__link"> <span class="md-ellipsis"> Interoperable </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/powerful/" class="md-nav__link"> <span class="md-ellipsis"> Powerful </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/secure/" class="md-nav__link"> <span class="md-ellipsis"> Secure </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_8" > <label class="md-nav__link" for="__nav_2_8" id="__nav_2_8_label" tabindex="0"> <span class="md-ellipsis"> Features walk-through </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_8"> <span class="md-nav__icon md-icon"></span> Features walk-through </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../features/features-walk-through/" class="md-nav__link"> <span class="md-ellipsis"> Features overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/features-walk-through/banners/" class="md-nav__link"> <span class="md-ellipsis"> Site banners </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/features-walk-through/notifications/" class="md-nav__link"> <span class="md-ellipsis"> Notifications </span> </a> </li> <li class="md-nav__item"> <a href="../../../features/features-walk-through/access_requests/" class="md-nav__link"> <span class="md-ellipsis"> Access requests </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-ellipsis"> Install </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> Install </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../install/" class="md-nav__link"> <span class="md-ellipsis"> Quick start </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/requirements/" class="md-nav__link"> <span class="md-ellipsis"> System requirements </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/cli/" class="md-nav__link"> <span class="md-ellipsis"> Install CLI </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/scaffold/" class="md-nav__link"> <span class="md-ellipsis"> Scaffold </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/build-setup-run/" class="md-nav__link"> <span class="md-ellipsis"> Build, setup & run </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/configuration/" class="md-nav__link"> <span class="md-ellipsis"> Configure </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/run/" class="md-nav__link"> <span class="md-ellipsis"> Use </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/migrate/" class="md-nav__link"> <span class="md-ellipsis"> Migrate </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/destroy/" class="md-nav__link"> <span class="md-ellipsis"> Destroy </span> </a> </li> <li class="md-nav__item"> <a href="../../../install/troubleshoot/" class="md-nav__link"> <span class="md-ellipsis"> Troubleshooting </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-ellipsis"> Customize </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Customize </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> <span class="md-ellipsis"> Look-and-feel </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_2"> <span class="md-nav__icon md-icon"></span> Look-and-feel </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/look-and-feel/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/look-and-feel/logo/" class="md-nav__link"> <span class="md-ellipsis"> Change logo </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/look-and-feel/templates/" class="md-nav__link"> <span class="md-ellipsis"> Change templates </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/look-and-feel/theme/" class="md-nav__link"> <span class="md-ellipsis"> Change theme </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/look-and-feel/font/" class="md-nav__link"> <span class="md-ellipsis"> Change font </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../customize/authentication/" class="md-nav__link"> <span class="md-ellipsis"> Authentication </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/emails/" class="md-nav__link"> <span class="md-ellipsis"> Sending emails </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" > <label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0"> <span class="md-ellipsis"> Search </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_5"> <span class="md-nav__icon md-icon"></span> Search </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/search/" class="md-nav__link"> <span class="md-ellipsis"> Change facets/sorting </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_6" > <label class="md-nav__link" for="__nav_4_6" id="__nav_4_6_label" tabindex="0"> <span class="md-ellipsis"> Vocabularies </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_6"> <span class="md-nav__icon md-icon"></span> Vocabularies </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/vocabularies/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/vocabularies/resource_types/" class="md-nav__link"> <span class="md-ellipsis"> Resource types </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/vocabularies/affiliations/" class="md-nav__link"> <span class="md-ellipsis"> Affiliations </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/vocabularies/names/" class="md-nav__link"> <span class="md-ellipsis"> Names </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/vocabularies/funding/" class="md-nav__link"> <span class="md-ellipsis"> Funding </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/vocabularies/subjects/" class="md-nav__link"> <span class="md-ellipsis"> Subjects </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/vocabularies/users/" class="md-nav__link"> <span class="md-ellipsis"> Users </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_7" > <label class="md-nav__link" for="__nav_4_7" id="__nav_4_7_label" tabindex="0"> <span class="md-ellipsis"> Metadata </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_7"> <span class="md-nav__icon md-icon"></span> Metadata </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/metadata/optional_fields/" class="md-nav__link"> <span class="md-ellipsis"> Optional metadata </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_7_2" > <label class="md-nav__link" for="__nav_4_7_2" id="__nav_4_7_2_label" tabindex="0"> <span class="md-ellipsis"> Custom fields </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_7_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_7_2"> <span class="md-nav__icon md-icon"></span> Custom fields </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/metadata/custom_fields/records/" class="md-nav__link"> <span class="md-ellipsis"> Add fields to records </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/metadata/custom_fields/communities/" class="md-nav__link"> <span class="md-ellipsis"> Add fields to communities </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../customize/record_landing_page/" class="md-nav__link"> <span class="md-ellipsis"> Record landing page </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/static_pages/" class="md-nav__link"> <span class="md-ellipsis"> Static pages </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/dois/" class="md-nav__link"> <span class="md-ellipsis"> DOI registration </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_11" > <label class="md-nav__link" for="__nav_4_11" id="__nav_4_11_label" tabindex="0"> <span class="md-ellipsis"> Other PIDs integrations </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_11_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_11"> <span class="md-nav__icon md-icon"></span> Other PIDs integrations </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../customize/other-pids/urns/" class="md-nav__link"> <span class="md-ellipsis"> DNB URNs </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../customize/s3/" class="md-nav__link"> <span class="md-ellipsis"> Storage </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/upload_limits/" class="md-nav__link"> <span class="md-ellipsis"> Upload Limits </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/metadata_only/" class="md-nav__link"> <span class="md-ellipsis"> Metadata-only records </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/Logging/" class="md-nav__link"> <span class="md-ellipsis"> Logging </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/i18n-and-l10n/" class="md-nav__link"> <span class="md-ellipsis"> Internationalisation (i18n) and Localisation (l10n) </span> </a> </li> <li class="md-nav__item"> <a href="../../../customize/notifications/" class="md-nav__link"> <span class="md-ellipsis"> Notifications </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked> <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex=""> <span class="md-ellipsis"> Develop </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Develop </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" > <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0"> <span class="md-ellipsis"> Getting started </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_2"> <span class="md-nav__icon md-icon"></span> Getting started </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../getting-started/source-code/" class="md-nav__link"> <span class="md-ellipsis"> Source code </span> </a> </li> <li class="md-nav__item"> <a href="../../getting-started/package-development/" class="md-nav__link"> <span class="md-ellipsis"> Package development </span> </a> </li> <li class="md-nav__item"> <a href="../../getting-started/instance-development/" class="md-nav__link"> <span class="md-ellipsis"> Instance development </span> </a> </li> <li class="md-nav__item"> <a href="../../getting-started/debugging/" class="md-nav__link"> <span class="md-ellipsis"> Debugging </span> </a> </li> <li class="md-nav__item"> <a href="../../getting-started/code-style/" class="md-nav__link"> <span class="md-ellipsis"> Coding style </span> </a> </li> <li class="md-nav__item"> <a href="../../getting-started/virtualenvs/" class="md-nav__link"> <span class="md-ellipsis"> Virtual environments </span> </a> </li> <li class="md-nav__item"> <a href="../../getting-started/help/" class="md-nav__link"> <span class="md-ellipsis"> Getting help </span> </a> </li> <li class="md-nav__item"> <a href="../../process/" class="md-nav__link"> <span class="md-ellipsis"> Development process </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" > <label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex="0"> <span class="md-ellipsis"> Best practices </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_3"> <span class="md-nav__icon md-icon"></span> Best practices </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../best-practices/accessibility/" class="md-nav__link"> <span class="md-ellipsis"> Accessibility (a11y) </span> </a> </li> <li class="md-nav__item"> <a href="../../best-practices/commits/" class="md-nav__link"> <span class="md-ellipsis"> Commits, PRs & reviews </span> </a> </li> <li class="md-nav__item"> <a href="../../best-practices/css-js/" class="md-nav__link"> <span class="md-ellipsis"> CSS/JavaScript </span> </a> </li> <li class="md-nav__item"> <a href="../../best-practices/react/" class="md-nav__link"> <span class="md-ellipsis"> React </span> </a> </li> <li class="md-nav__item"> <a href="../../best-practices/ui/" class="md-nav__link"> <span class="md-ellipsis"> User interface </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_4" checked> <label class="md-nav__link" for="__nav_5_4" id="__nav_5_4_label" tabindex="0"> <span class="md-ellipsis"> Topic guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_4_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_5_4"> <span class="md-nav__icon md-icon"></span> Topic guides </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../resource/" class="md-nav__link"> <span class="md-ellipsis"> Building resources </span> </a> </li> <li class="md-nav__item"> <a href="../service/" class="md-nav__link"> <span class="md-ellipsis"> Building services </span> </a> </li> <li class="md-nav__item"> <a href="../serializers/" class="md-nav__link"> <span class="md-ellipsis"> Building serializers </span> </a> </li> <li class="md-nav__item"> <a href="../uow/" class="md-nav__link"> <span class="md-ellipsis"> Grouping atomic operations </span> </a> </li> <li class="md-nav__item"> <a href="../validation/" class="md-nav__link"> <span class="md-ellipsis"> Sanitize input data </span> </a> </li> <li class="md-nav__item"> <a href="../theming/" class="md-nav__link"> <span class="md-ellipsis"> Theming </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Administration panel </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Administration panel </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#summary" class="md-nav__link"> <span class="md-ellipsis"> Summary </span> </a> </li> <li class="md-nav__item"> <a href="#intended-audience" class="md-nav__link"> <span class="md-ellipsis"> Intended audience </span> </a> </li> <li class="md-nav__item"> <a href="#overview" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="#domain-dictionary" class="md-nav__link"> <span class="md-ellipsis"> Domain dictionary </span> </a> </li> <li class="md-nav__item"> <a href="#administration-panel_1" class="md-nav__link"> <span class="md-ellipsis"> Administration panel </span> </a> <nav class="md-nav" aria-label="Administration panel"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#architecture" class="md-nav__link"> <span class="md-ellipsis"> Architecture </span> </a> </li> <li class="md-nav__item"> <a href="#views" class="md-nav__link"> <span class="md-ellipsis"> Views </span> </a> <nav class="md-nav" aria-label="Views"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#create-a-resource-based-view" class="md-nav__link"> <span class="md-ellipsis"> Create a resource based view </span> </a> <nav class="md-nav" aria-label="Create a resource based view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#folder-structure" class="md-nav__link"> <span class="md-ellipsis"> Folder structure </span> </a> </li> <li class="md-nav__item"> <a href="#list-view" class="md-nav__link"> <span class="md-ellipsis"> List view </span> </a> <nav class="md-nav" aria-label="List view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#create-view" class="md-nav__link"> <span class="md-ellipsis"> Create view </span> </a> <nav class="md-nav" aria-label="Create view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_1" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#edit-view" class="md-nav__link"> <span class="md-ellipsis"> Edit view </span> </a> <nav class="md-nav" aria-label="Edit view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_2" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#details-view" class="md-nav__link"> <span class="md-ellipsis"> Details view </span> </a> <nav class="md-nav" aria-label="Details view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_3" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#views-registration" class="md-nav__link"> <span class="md-ellipsis"> Views registration </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#create-custom-view" class="md-nav__link"> <span class="md-ellipsis"> Create custom view </span> </a> <nav class="md-nav" aria-label="Create custom view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_4" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#customisation-dashboard-view" class="md-nav__link"> <span class="md-ellipsis"> Customisation: dashboard view </span> </a> </li> <li class="md-nav__item"> <a href="#customisation-jinja-templates" class="md-nav__link"> <span class="md-ellipsis"> Customisation: Jinja templates </span> </a> </li> <li class="md-nav__item"> <a href="#customisation-react-components" class="md-nav__link"> <span class="md-ellipsis"> Customisation: React components </span> </a> </li> <li class="md-nav__item"> <a href="#permissions" class="md-nav__link"> <span class="md-ellipsis"> Permissions </span> </a> </li> <li class="md-nav__item"> <a href="#admin-actions-permissions" class="md-nav__link"> <span class="md-ellipsis"> Admin actions permissions </span> </a> <nav class="md-nav" aria-label="Admin actions permissions"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#custom-permissions" class="md-nav__link"> <span class="md-ellipsis"> Custom permissions </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_5" > <label class="md-nav__link" for="__nav_5_5" id="__nav_5_5_label" tabindex="0"> <span class="md-ellipsis"> How-to guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_5"> <span class="md-nav__icon md-icon"></span> How-to guides </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../howtos/i18n/" class="md-nav__link"> <span class="md-ellipsis"> Translation (i18n) </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/custom_fields/" class="md-nav__link"> <span class="md-ellipsis"> Create a new custom field </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/custom_code/" class="md-nav__link"> <span class="md-ellipsis"> Create custom code and views </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/add_javascript/" class="md-nav__link"> <span class="md-ellipsis"> Add JavaScript </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/override_components/" class="md-nav__link"> <span class="md-ellipsis"> Override UI React components </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/search_terms_migration/" class="md-nav__link"> <span class="md-ellipsis"> Create search terms mappings </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/alembic/" class="md-nav__link"> <span class="md-ellipsis"> Create a database migration </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/security-fix/" class="md-nav__link"> <span class="md-ellipsis"> Fix a vulnerability </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/dev_email/" class="md-nav__link"> <span class="md-ellipsis"> Test emails locally </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/route_migration/" class="md-nav__link"> <span class="md-ellipsis"> Migrate legacy routes </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/backup_search_indices/" class="md-nav__link"> <span class="md-ellipsis"> Back up search indices </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/restrict_access/" class="md-nav__link"> <span class="md-ellipsis"> Restrict access to pages </span> </a> </li> <li class="md-nav__item"> <a href="../../howtos/notifications/" class="md-nav__link"> <span class="md-ellipsis"> Create and configure notifications </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_6" > <label class="md-nav__link" for="__nav_5_6" id="__nav_5_6_label" tabindex="0"> <span class="md-ellipsis"> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_6"> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../architecture/" class="md-nav__link"> <span class="md-ellipsis"> Introduction </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/infrastructure/" class="md-nav__link"> <span class="md-ellipsis"> Infrastructure </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/software/" class="md-nav__link"> <span class="md-ellipsis"> Software </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/runtime/" class="md-nav__link"> <span class="md-ellipsis"> Runtime </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/requests/" class="md-nav__link"> <span class="md-ellipsis"> Requests </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/communities/" class="md-nav__link"> <span class="md-ellipsis"> Communities </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/records/" class="md-nav__link"> <span class="md-ellipsis"> Records </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/event_handling/" class="md-nav__link"> <span class="md-ellipsis"> Event handling </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/notifications/" class="md-nav__link"> <span class="md-ellipsis"> Notifications </span> </a> </li> <li class="md-nav__item"> <a href="../../architecture/reading/" class="md-nav__link"> <span class="md-ellipsis"> Recommended reading </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_7" > <label class="md-nav__link" for="__nav_5_7" id="__nav_5_7_label" tabindex="0"> <span class="md-ellipsis"> Concepts </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5_7"> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../concepts/concurrency-control/" class="md-nav__link"> <span class="md-ellipsis"> Optimistic concurrency control </span> </a> </li> <li class="md-nav__item"> <a href="../../concepts/transactions/" class="md-nav__link"> <span class="md-ellipsis"> Database transaction management </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../deploy/" class="md-nav__link"> <span class="md-ellipsis"> Deploy </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0"> <span class="md-ellipsis"> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../reference/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/cli/" class="md-nav__link"> <span class="md-ellipsis"> CLI </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/configuration/" class="md-nav__link"> <span class="md-ellipsis"> Configuration </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/metadata/" class="md-nav__link"> <span class="md-ellipsis"> Metadata </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/metadata/optional_metadata/" class="md-nav__link"> <span class="md-ellipsis"> Optional metadata </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/oai_pmh/" class="md-nav__link"> <span class="md-ellipsis"> OAI-PMH </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/export_formats/" class="md-nav__link"> <span class="md-ellipsis"> Export formats </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_8" > <label class="md-nav__link" for="__nav_7_8" id="__nav_7_8_label" tabindex="0"> <span class="md-ellipsis"> REST API </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_8"> <span class="md-nav__icon md-icon"></span> REST API </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../reference/rest_api_index/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_quickstart/" class="md-nav__link"> <span class="md-ellipsis"> Quickstart </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_communities/" class="md-nav__link"> <span class="md-ellipsis"> Communities </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_drafts_records/" class="md-nav__link"> <span class="md-ellipsis"> Drafts and Records </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_groups/" class="md-nav__link"> <span class="md-ellipsis"> Groups </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_members/" class="md-nav__link"> <span class="md-ellipsis"> Members </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_requests/" class="md-nav__link"> <span class="md-ellipsis"> Requests </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_users/" class="md-nav__link"> <span class="md-ellipsis"> Users </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_reviews/" class="md-nav__link"> <span class="md-ellipsis"> Reviews </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_vocabularies/" class="md-nav__link"> <span class="md-ellipsis"> Vocabularies </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_names/" class="md-nav__link"> <span class="md-ellipsis"> Names </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_funders/" class="md-nav__link"> <span class="md-ellipsis"> Funders </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_awards/" class="md-nav__link"> <span class="md-ellipsis"> Awards </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_oaipmh_sets/" class="md-nav__link"> <span class="md-ellipsis"> OAI-PMH Sets </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/rest_api_statistics/" class="md-nav__link"> <span class="md-ellipsis"> Statistics </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_9" > <label class="md-nav__link" for="__nav_7_9" id="__nav_7_9_label" tabindex="0"> <span class="md-ellipsis"> Custom fields </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_9"> <span class="md-nav__icon md-icon"></span> Custom fields </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../reference/custom_fields/widgets/" class="md-nav__link"> <span class="md-ellipsis"> UI widgets </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_10" > <label class="md-nav__link" for="__nav_7_10" id="__nav_7_10_label" tabindex="0"> <span class="md-ellipsis"> Administration </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_10_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7_10"> <span class="md-nav__icon md-icon"></span> Administration </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../reference/administration_reference/" class="md-nav__link"> <span class="md-ellipsis"> Reference </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../reference/file_storage/" class="md-nav__link"> <span class="md-ellipsis"> File storage </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/statistics/" class="md-nav__link"> <span class="md-ellipsis"> Usage statistics </span> </a> </li> <li class="md-nav__item"> <a href="../../../reference/notifications/" class="md-nav__link"> <span class="md-ellipsis"> Notifications </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" > <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0"> <span class="md-ellipsis"> Releases </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8"> <span class="md-nav__icon md-icon"></span> Releases </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/maintenance-policy/" class="md-nav__link"> <span class="md-ellipsis"> Maintenance policy </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/upgrade-policy/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade policy </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/security-policy/" class="md-nav__link"> <span class="md-ellipsis"> Security policy </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_5" > <label class="md-nav__link" for="__nav_8_5" id="__nav_8_5_label" tabindex="0"> <span class="md-ellipsis"> Version v12.0 LTS </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_5"> <span class="md-nav__icon md-icon"></span> Version v12.0 LTS </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v12/version-v12.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v12.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v12/upgrade-v12.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v11 to v12 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_6" > <label class="md-nav__link" for="__nav_8_6" id="__nav_8_6_label" tabindex="0"> <span class="md-ellipsis"> Version v11.0 STS </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_6"> <span class="md-nav__icon md-icon"></span> Version v11.0 STS </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v11/version-v11.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v11.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v11/upgrade-v11.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v10 to v11 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_7" > <label class="md-nav__link" for="__nav_8_7" id="__nav_8_7_label" tabindex="0"> <span class="md-ellipsis"> Version v9.1 LTS </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_7"> <span class="md-nav__icon md-icon"></span> Version v9.1 LTS </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v9/version-v9.1.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v9.1 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v9/version-v9.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v9.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/migrate-docker-images/" class="md-nav__link"> <span class="md-ellipsis"> Migrate Docker images </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v9/migrate-opensearch-v9/" class="md-nav__link"> <span class="md-ellipsis"> Migrate v9 to OpenSearch </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v9/upgrade-v9.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v8 to v9 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8" > <label class="md-nav__link" for="__nav_8_8" id="__nav_8_8_label" tabindex="0"> <span class="md-ellipsis"> Legacy Versions </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8"> <span class="md-nav__icon md-icon"></span> Legacy Versions </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_1" > <label class="md-nav__link" for="__nav_8_8_1" id="__nav_8_8_1_label" tabindex="0"> <span class="md-ellipsis"> Version v10.1 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_1_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_1"> <span class="md-nav__icon md-icon"></span> Version v10.1 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v10/version-v10.1.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v10.1 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v10/version-v10.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v10.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v10/upgrade-v10.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v9 to v10 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/migrate-docker-images/" class="md-nav__link"> <span class="md-ellipsis"> Migrate Docker images </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_2" > <label class="md-nav__link" for="__nav_8_8_2" id="__nav_8_8_2_label" tabindex="0"> <span class="md-ellipsis"> Version v8.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_2"> <span class="md-nav__icon md-icon"></span> Version v8.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v8/version-v8.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v8.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v8/upgrade-v8.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v7 to v8 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_3" > <label class="md-nav__link" for="__nav_8_8_3" id="__nav_8_8_3_label" tabindex="0"> <span class="md-ellipsis"> Version v7.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_3"> <span class="md-nav__icon md-icon"></span> Version v7.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v7/version-v7.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v7.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v7/upgrade-v7.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v6 to v7 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_4" > <label class="md-nav__link" for="__nav_8_8_4" id="__nav_8_8_4_label" tabindex="0"> <span class="md-ellipsis"> Version v6.0.5 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_4"> <span class="md-nav__icon md-icon"></span> Version v6.0.5 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v6/version-v6.0.5/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v6.0.5 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v6/upgrade-v6.0.5/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v6.0.x to v6.0.5 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v6/version-v6.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v6.0.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v6/upgrade-v6.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v4 to v6 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_5" > <label class="md-nav__link" for="__nav_8_8_5" id="__nav_8_8_5_label" tabindex="0"> <span class="md-ellipsis"> Version v5.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_5"> <span class="md-nav__icon md-icon"></span> Version v5.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v5/version-v5.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v5.0 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_6" > <label class="md-nav__link" for="__nav_8_8_6" id="__nav_8_8_6_label" tabindex="0"> <span class="md-ellipsis"> Version v4.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_6"> <span class="md-nav__icon md-icon"></span> Version v4.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v4/version-v4.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v4.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v4/upgrade-v4.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v3 to v4 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_7" > <label class="md-nav__link" for="__nav_8_8_7" id="__nav_8_8_7_label" tabindex="0"> <span class="md-ellipsis"> Version v3.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_7"> <span class="md-nav__icon md-icon"></span> Version v3.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v3/version-v3.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v3.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v3/upgrade-v3.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v2 to v3 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_8" > <label class="md-nav__link" for="__nav_8_8_8" id="__nav_8_8_8_label" tabindex="0"> <span class="md-ellipsis"> Version v2.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_8_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_8"> <span class="md-nav__icon md-icon"></span> Version v2.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v2/version-v2.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v2.0 </span> </a> </li> <li class="md-nav__item"> <a href="../../../releases/v2/upgrade-v2.0/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade from v1 to v2 </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_8_9" > <label class="md-nav__link" for="__nav_8_8_9" id="__nav_8_8_9_label" tabindex="0"> <span class="md-ellipsis"> Version v1.0 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_8_8_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_8_8_9"> <span class="md-nav__icon md-icon"></span> Version v1.0 </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../releases/v1/version-v1.0.0/" class="md-nav__link"> <span class="md-ellipsis"> Release Notes v1.0 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" > <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0"> <span class="md-ellipsis"> Maintainers </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_9"> <span class="md-nav__icon md-icon"></span> Maintainers </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../maintenance/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/newcomers/" class="md-nav__link"> <span class="md-ellipsis"> Newcomers </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/board-workflow/" class="md-nav__link"> <span class="md-ellipsis"> Sprintboard workflow </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/pr-community-board/" class="md-nav__link"> <span class="md-ellipsis"> Community PR board </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/release-management/" class="md-nav__link"> <span class="md-ellipsis"> Release management </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/modules/" class="md-nav__link"> <span class="md-ellipsis"> Modules on GitHub </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/branch-management/" class="md-nav__link"> <span class="md-ellipsis"> Branch management </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/demosite/" class="md-nav__link"> <span class="md-ellipsis"> Demo site & docs </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/docker-images/" class="md-nav__link"> <span class="md-ellipsis"> Docker images </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/rfcs/" class="md-nav__link"> <span class="md-ellipsis"> RFCs </span> </a> </li> <li class="md-nav__item"> <a href="../../../maintenance/documentation/" class="md-nav__link"> <span class="md-ellipsis"> Writing documentation </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_10" > <label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0"> <span class="md-ellipsis"> Onboard & Contribute </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_10"> <span class="md-nav__icon md-icon"></span> Onboard & Contribute </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../contribute/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../contribute/onboarding/" class="md-nav__link"> <span class="md-ellipsis"> Onboarding </span> </a> </li> <li class="md-nav__item"> <a href="../../../contribute/code-of-conduct/" class="md-nav__link"> <span class="md-ellipsis"> Code of conduct </span> </a> </li> <li class="md-nav__item"> <a href="../../../contribute/copyright-policy/" class="md-nav__link"> <span class="md-ellipsis"> Copyright policy </span> </a> </li> <li class="md-nav__item"> <a href="../../../contribute/roadmap/" class="md-nav__link"> <span class="md-ellipsis"> Roadmap </span> </a> </li> <li class="md-nav__item"> <a href="../../../contribute/translators-guide/" class="md-nav__link"> <span class="md-ellipsis"> Translators guide </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#summary" class="md-nav__link"> <span class="md-ellipsis"> Summary </span> </a> </li> <li class="md-nav__item"> <a href="#intended-audience" class="md-nav__link"> <span class="md-ellipsis"> Intended audience </span> </a> </li> <li class="md-nav__item"> <a href="#overview" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="#domain-dictionary" class="md-nav__link"> <span class="md-ellipsis"> Domain dictionary </span> </a> </li> <li class="md-nav__item"> <a href="#administration-panel_1" class="md-nav__link"> <span class="md-ellipsis"> Administration panel </span> </a> <nav class="md-nav" aria-label="Administration panel"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#architecture" class="md-nav__link"> <span class="md-ellipsis"> Architecture </span> </a> </li> <li class="md-nav__item"> <a href="#views" class="md-nav__link"> <span class="md-ellipsis"> Views </span> </a> <nav class="md-nav" aria-label="Views"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#create-a-resource-based-view" class="md-nav__link"> <span class="md-ellipsis"> Create a resource based view </span> </a> <nav class="md-nav" aria-label="Create a resource based view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#folder-structure" class="md-nav__link"> <span class="md-ellipsis"> Folder structure </span> </a> </li> <li class="md-nav__item"> <a href="#list-view" class="md-nav__link"> <span class="md-ellipsis"> List view </span> </a> <nav class="md-nav" aria-label="List view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#create-view" class="md-nav__link"> <span class="md-ellipsis"> Create view </span> </a> <nav class="md-nav" aria-label="Create view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_1" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#edit-view" class="md-nav__link"> <span class="md-ellipsis"> Edit view </span> </a> <nav class="md-nav" aria-label="Edit view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_2" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#details-view" class="md-nav__link"> <span class="md-ellipsis"> Details view </span> </a> <nav class="md-nav" aria-label="Details view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_3" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#views-registration" class="md-nav__link"> <span class="md-ellipsis"> Views registration </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#create-custom-view" class="md-nav__link"> <span class="md-ellipsis"> Create custom view </span> </a> <nav class="md-nav" aria-label="Create custom view"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#usage_4" class="md-nav__link"> <span class="md-ellipsis"> Usage </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#customisation-dashboard-view" class="md-nav__link"> <span class="md-ellipsis"> Customisation: dashboard view </span> </a> </li> <li class="md-nav__item"> <a href="#customisation-jinja-templates" class="md-nav__link"> <span class="md-ellipsis"> Customisation: Jinja templates </span> </a> </li> <li class="md-nav__item"> <a href="#customisation-react-components" class="md-nav__link"> <span class="md-ellipsis"> Customisation: React components </span> </a> </li> <li class="md-nav__item"> <a href="#permissions" class="md-nav__link"> <span class="md-ellipsis"> Permissions </span> </a> </li> <li class="md-nav__item"> <a href="#admin-actions-permissions" class="md-nav__link"> <span class="md-ellipsis"> Admin actions permissions </span> </a> <nav class="md-nav" aria-label="Admin actions permissions"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#custom-permissions" class="md-nav__link"> <span class="md-ellipsis"> Custom permissions </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1 id="administration-panel">Administration panel<a class="headerlink" href="#administration-panel" title="Permanent link">¶</a></h1> <p><em>Introduced in InvenioRDM v10</em></p> <h2 id="summary">Summary<a class="headerlink" href="#summary" title="Permanent link">¶</a></h2> <p>The following document is a developer guide to the InvenioRDM administration panel, detailing its programmatic interface and usage.</p> <h2 id="intended-audience">Intended audience<a class="headerlink" href="#intended-audience" title="Permanent link">¶</a></h2> <p>This guide is intended for developers of InvenioRDM.</p> <h2 id="overview">Overview<a class="headerlink" href="#overview" title="Permanent link">¶</a></h2> <p>Invenio administration panel gives the administrator an easy and simple web interface to effectively manage an instance of InvenioRDM.</p> <h2 id="domain-dictionary">Domain dictionary<a class="headerlink" href="#domain-dictionary" title="Permanent link">¶</a></h2> <p>The following terms are introduced to facilitate defining the domain:</p> <ul> <li><code>administration panel</code> - the interface panel enabling a <code>manager</code> to administrate the instance of InvenioRDM in a developer-independent way.</li> <li><code>administrator</code> - a person with domain knowledge, with a special set of permissions, able to manage an InvenioRDM instance, not necessarily having developer skills.</li> <li><code>frontsite</code>, <code>end user interface</code> - currently known InvenioRDM interface, accessible by anonymous and logged-in users, without administrator role.</li> <li><code>administration view</code> - content of the administration panel (pages)</li> </ul> <h2 id="administration-panel_1">Administration panel<a class="headerlink" href="#administration-panel_1" title="Permanent link">¶</a></h2> <p><img alt="Administration Panel" src="../img/administration/administration_wireframe.png" /></p> <p>An instance developer can register new entries in the menu (see the administration <a href="https://github.com/inveniosoftware/rfcs/blob/master/rfcs/rdm-0067-administration-panel.md">RFC</a>). A menu entry will display the associated views in the panel section. The navbar menu layouts are customizable to meet the needs of the InvenioRDM instance.</p> <h3 id="architecture">Architecture<a class="headerlink" href="#architecture" title="Permanent link">¶</a></h3> <p><img alt="Architecture diagram" src="../img/administration/administration_architecture.png" /></p> <p>The views are implemented as shown on the diagram below. InvenioRDM developer can implement a new admin view by inheriting one of the following view classes:</p> <table> <thead> <tr> <th>View</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>AdminView</td> <td>Base view class, provides flask view blueprint registration and administration side menu registration</td> </tr> <tr> <td>AdminResourceDetailView</td> <td>Details view base - displays details of a single item of the resource</td> </tr> <tr> <td>AdminResourceListView</td> <td>ListView base - displays a search page with all the resource items of a given type</td> </tr> <tr> <td>AdminResourceCreateView</td> <td>View generating a form to add a new instance of a resource</td> </tr> <tr> <td>AdminResourceEditView</td> <td>View generating a form to edit an existing resource item</td> </tr> </tbody> </table> <h3 id="views">Views<a class="headerlink" href="#views" title="Permanent link">¶</a></h3> <h4 id="create-a-resource-based-view">Create a resource based view<a class="headerlink" href="#create-a-resource-based-view" title="Permanent link">¶</a></h4> <p>Administration resource based views are using existing REST API. The CRUD operations are provided for any existent InvenioRDM <a href="../resource/">resource</a> (e.g. community, record, OAISet - meaning they follow the REST API resource architecture pattern).</p> <p>As an example, a step-by-step guide is provided to generate an administration view for OAI-PMH Sets.</p> <h5 id="folder-structure">Folder structure<a class="headerlink" href="#folder-structure" title="Permanent link">¶</a></h5> <p>To create an administration view for a module, the following structure is recommended:</p> <div class="highlight"><pre><span></span><code><span class="go">invenio-rdm-records</span> <span class="go">|-- administration</span> <span class="go"> |-- __init__.py</span> <span class="go"> |-- views</span> <span class="go"> |-- __init__.py</span> <span class="go"> |-- oai.py</span> </code></pre></div> <p>Views are implemented in <code>invenio_rdm_records/administration/views/<myview>.py</code>. We strongly recommend to follow this proposed folder structure as it promotes clear code organisation, however it is not technically required.</p> <h5 id="list-view">List view<a class="headerlink" href="#list-view" title="Permanent link">¶</a></h5> <p>A ListView displays a list of records that are retrieved from an InvenioRDM <a href="../resource/">resource</a> REST APIs endpoint. By default, <code>Invenio-Administration</code> provides a core module that generates this view, based on given <code>ListView</code> configuration.</p> <p>By default, the ListView is represented as a table. The view uses a search app, bootstrapped using <a href="https://inveniosoftware.github.io/react-searchkit/">React-SearchKit</a>. It provides a tabular view of the resources, as well as a set of features such as searching, sorting and even faceting.</p> <p><img alt="List view layout" src="../img/administration/administration_list_view.png" /></p> <p>Each row contains a set of actions that can be performed on a resource. These actions can be the "default" ones, such as "Edit" or "Delete", but can also be extended to support custom actions that are only available for that specific resource, e.g. feature a community.</p> <h6 id="usage">Usage<a class="headerlink" href="#usage" title="Permanent link">¶</a></h6> <p>This is an example of ListView configuration for OAI-PMH set resource.</p> <div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">invenio_administration.views.base</span> <span class="kn">import</span> <span class="n">AdminResourceListView</span> <span class="k">class</span> <span class="nc">OaiPmhListView</span><span class="p">(</span><span class="n">AdminResourceListView</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""Configuration for OAI-PMH sets list view."""</span> <span class="n">api_endpoint</span> <span class="o">=</span> <span class="s2">"/oaipmh/sets"</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"OAI-PMH"</span> <span class="n">resource_config</span> <span class="o">=</span> <span class="s2">"oaipmh_server_resource"</span> <span class="n">search_request_headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Accept"</span><span class="p">:</span> <span class="s2">"application/json"</span><span class="p">}</span> <span class="n">title</span> <span class="o">=</span> <span class="s2">"OAI-PMH Sets"</span> <span class="n">category</span> <span class="o">=</span> <span class="s2">"Site management"</span> <span class="n">pid_path</span> <span class="o">=</span> <span class="s2">"id"</span> <span class="n">icon</span> <span class="o">=</span> <span class="s2">"exchange"</span> <span class="n">template</span> <span class="o">=</span> <span class="s2">"invenio_rdm_records/oai-search.html"</span> <span class="n">display_search</span> <span class="o">=</span> <span class="kc">True</span> <span class="n">display_delete</span> <span class="o">=</span> <span class="kc">True</span> <span class="n">display_edit</span> <span class="o">=</span> <span class="kc">True</span> <span class="n">item_field_list</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"spec"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set spec"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span> <span class="s2">"name"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set name"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">2</span><span class="p">},</span> <span class="s2">"search_pattern"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Search query"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">3</span><span class="p">},</span> <span class="s2">"created"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Created"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">4</span><span class="p">},</span> <span class="s2">"updated"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Updated"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span> <span class="p">}</span> <span class="n">search_config_name</span> <span class="o">=</span> <span class="s2">"RDM_OAI_PMH_SEARCH"</span> <span class="n">search_facets_config_name</span> <span class="o">=</span> <span class="s2">"RDM_OAI_PMH_FACETS"</span> <span class="n">search_sort_config_name</span> <span class="o">=</span> <span class="s2">"RDM_OAI_PMH_SORT_OPTIONS"</span> <span class="n">create_view_name</span> <span class="o">=</span> <span class="s2">"oaipmh_create"</span> <span class="n">resource_name</span> <span class="o">=</span> <span class="s2">"name"</span> </code></pre></div> <p>For the full attributes list and description visit the <a href="../../../reference/administration_reference/">reference docs</a>.</p> <h5 id="create-view">Create view<a class="headerlink" href="#create-view" title="Permanent link">¶</a></h5> <p><img alt="Create view layout" src="../img/administration/administration_create_view.png" /></p> <p>A create view displays a page on which a resource can be created. By default, <code>Invenio-Administration</code> provides a core module that generates this view based on given <code>CreateView</code> configuration.</p> <p>Form fields are configured as class attributes. If the <code>form_fields</code> attribute is not implemented, the view will display all the fields configured in the resource's <a href="../serializers/#data-transformations">serializer</a>.</p> <h6 id="usage_1">Usage<a class="headerlink" href="#usage_1" title="Permanent link">¶</a></h6> <p>This is an example of CreateView configuration for OAI-PMH set resource.</p> <div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">OaiPmhCreateView</span><span class="p">(</span><span class="n">AdminResourceCreateView</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""Configuration for OAI-PMH sets create view."""</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"oaipmh_create"</span> <span class="n">url</span> <span class="o">=</span> <span class="s2">"/oai-pmh/create"</span> <span class="n">resource_config</span> <span class="o">=</span> <span class="s2">"oaipmh_server_resource"</span> <span class="n">pid_path</span> <span class="o">=</span> <span class="s2">"id"</span> <span class="n">api_endpoint</span> <span class="o">=</span> <span class="s2">"/oaipmh/sets"</span> <span class="n">title</span> <span class="o">=</span> <span class="s2">"Create OAI-PMH set"</span> <span class="n">list_view_name</span> <span class="o">=</span> <span class="s2">"OAI-PMH"</span> <span class="n">form_fields</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"name"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set name"</span><span class="p">},</span> <span class="s2">"spec"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set spec"</span><span class="p">},</span> <span class="s2">"search_pattern"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Search query"</span><span class="p">},</span> <span class="p">}</span> </code></pre></div> <p>For the full attributes list and description visit the <a href="../../../reference/administration_reference/">reference docs</a></p> <h5 id="edit-view">Edit view<a class="headerlink" href="#edit-view" title="Permanent link">¶</a></h5> <p><img alt="Edit view layout" src="../img/administration/administration_edit_view.png" /></p> <p>This view displays a form to edit a selected resource. Form fields are customizable to each resource by implementing marshmallow <a href="../serializers/#data-transformations">schema</a></p> <h6 id="usage_2">Usage<a class="headerlink" href="#usage_2" title="Permanent link">¶</a></h6> <p>This is an example of EditView configuration for OAI-PMH set resource.</p> <div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">OaiPmhEditView</span><span class="p">(</span><span class="n">AdminResourceEditView</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""Configuration for OAI-PMH sets edit view."""</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"oaipmh_edit"</span> <span class="n">url</span> <span class="o">=</span> <span class="s2">"/oai-pmh/<pid_value>/edit"</span> <span class="n">resource_config</span> <span class="o">=</span> <span class="s2">"oaipmh_server_resource"</span> <span class="n">pid_path</span> <span class="o">=</span> <span class="s2">"id"</span> <span class="n">api_endpoint</span> <span class="o">=</span> <span class="s2">"/oaipmh/sets"</span> <span class="n">title</span> <span class="o">=</span> <span class="s2">"Edit OAI-PMH set"</span> <span class="n">list_view_name</span> <span class="o">=</span> <span class="s2">"OAI-PMH"</span> <span class="n">form_fields</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"name"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set name"</span><span class="p">},</span> <span class="s2">"spec"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set spec"</span><span class="p">},</span> <span class="s2">"search_pattern"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Search query"</span><span class="p">},</span> <span class="s2">"created"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span> <span class="s2">"updated"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"order"</span><span class="p">:</span> <span class="mi">6</span><span class="p">},</span> <span class="p">}</span> </code></pre></div> <p>For the full attributes list and description visit the <a href="../../../reference/administration_reference/">reference docs</a></p> <h5 id="details-view">Details view<a class="headerlink" href="#details-view" title="Permanent link">¶</a></h5> <p><img alt="Details view layout" src="../img/administration/administration_details_view.png" /> By default, this view displays the details of a selected resource. It can be configured to display/hide a set of fields.</p> <p>It can be extended or completely overridden by a custom view.</p> <p>For OAI-PMH sets, as seen in the figure, this view uses a custom Jinja template and <code>React</code> to render a second table that displays OAI-PMH Sets links.</p> <p>More information on template override and custom React components will be detailed later in this guide.</p> <h6 id="usage_3">Usage<a class="headerlink" href="#usage_3" title="Permanent link">¶</a></h6> <p>This is an example of DetailView configuration for OAI-PMH set resource.</p> <div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="nc">OaiPmhDetailView</span><span class="p">(</span><span class="n">AdminResourceDetailView</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""Configuration for OAI-PMH sets detail view."""</span> <span class="n">url</span> <span class="o">=</span> <span class="s2">"/oai-pmh/<pid_value>"</span> <span class="n">api_endpoint</span> <span class="o">=</span> <span class="s2">"/oaipmh/sets"</span> <span class="n">search_request_headers</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"Accept"</span><span class="p">:</span> <span class="s2">"application/json"</span><span class="p">}</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"OAI-PMH details"</span> <span class="n">resource_config</span> <span class="o">=</span> <span class="s2">"oaipmh_server_resource"</span> <span class="n">title</span> <span class="o">=</span> <span class="s2">"OAI-PMH Details"</span> <span class="n">template</span> <span class="o">=</span> <span class="s2">"invenio_rdm_records/oai-details.html"</span> <span class="n">display_delete</span> <span class="o">=</span> <span class="kc">True</span> <span class="n">display_edit</span> <span class="o">=</span> <span class="kc">True</span> <span class="n">list_view_name</span> <span class="o">=</span> <span class="s2">"OAI-PMH"</span> <span class="n">pid_path</span> <span class="o">=</span> <span class="s2">"id"</span> <span class="n">item_field_list</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"name"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set name"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span> <span class="s2">"spec"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Set spec"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">2</span><span class="p">},</span> <span class="s2">"search_pattern"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Search query"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">3</span><span class="p">},</span> <span class="s2">"created"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Created"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">4</span><span class="p">},</span> <span class="s2">"updated"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"text"</span><span class="p">:</span> <span class="s2">"Updated"</span><span class="p">,</span> <span class="s2">"order"</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span> <span class="p">}</span> </code></pre></div> <p>For the full attributes list and description visit the <a href="../../../reference/administration_reference/">reference docs</a></p> <h5 id="views-registration">Views registration<a class="headerlink" href="#views-registration" title="Permanent link">¶</a></h5> <p>In order to render views in <code>Invenio-Administration</code>, they must be registered from the module on which they are implemented.</p> <p>To register your new view, you will have to:</p> <ol> <li>Create views in the module.</li> <li>Configure views to match your needs.</li> <li>Register views in <code>Invenio-Administration</code> entry point group.</li> </ol> <p>In OAI-PMH sets example, views are registered in <code>Invenio-Administration</code> as individual entry points from <code>invenio-rdm-records</code>.</p> <p>Edit the setup.cfg in the module and add:</p> <div class="highlight"><pre><span></span><code><span class="k">[options.entry_points]</span> <span class="na">invenio_administration.views</span><span class="w"> </span><span class="o">=</span> <span class="w"> </span><span class="na">invenio_rdm_records_oai_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">invenio_rdm_records.administration.views.oai:OaiPmhListView</span> <span class="w"> </span><span class="na">invenio_rdm_records_oai_edit</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">invenio_rdm_records.administration.views.oai:OaiPmhEditView</span> <span class="w"> </span><span class="na">invenio_rdm_records_oai_create</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">invenio_rdm_records.administration.views.oai:OaiPmhCreateView</span> <span class="w"> </span><span class="na">invenio_rdm_records_details</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">invenio_rdm_records.administration.views.oai:OaiPmhDetailView</span> </code></pre></div> <h4 id="create-custom-view">Create custom view<a class="headerlink" href="#create-custom-view" title="Permanent link">¶</a></h4> <p>A custom view can be created by inheriting directly from <code>AdminView</code>.</p> <h5 id="usage_4">Usage<a class="headerlink" href="#usage_4" title="Permanent link">¶</a></h5> <p>In your <code><invenio-module></code> (called <code>invenio_module</code> for simplicity), create a <code><filename>.py</code> file:</p> <div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">invenio_administration.views.base</span> <span class="kn">import</span> <span class="n">AdminView</span> <span class="k">class</span> <span class="nc">MyCustomView</span><span class="p">(</span><span class="n">AdminView</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""My custom view."""</span> <span class="n">name</span> <span class="o">=</span> <span class="s2">"customview"</span> <span class="n">category</span> <span class="o">=</span> <span class="s2">"My category"</span> <span class="n">template</span> <span class="o">=</span> <span class="s2">"invenio_module/custom_view_template.html"</span> <span class="c1"># placed in templates/invenio_module/custom_view_template.html</span> <span class="n">url</span> <span class="o">=</span> <span class="kc">None</span> <span class="n">menu_label</span> <span class="o">=</span> <span class="s2">"Custom View"</span> <span class="n">icon</span> <span class="o">=</span> <span class="s2">"user"</span> </code></pre></div> <p>The class defined for the custom view must be registered as an entry point, as follows:</p> <p>Edit the <code>setup.cfg</code> of your module and add:</p> <div class="highlight"><pre><span></span><code><span class="k">[options.entry_points]</span> <span class="na">invenio_administration.views</span><span class="w"> </span><span class="o">=</span> <span class="w"> </span><span class="na">invenio_module_admin_custom_view</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">invenio_module.path.to.filename:MyCustomView</span> </code></pre></div> <p>For the full attributes list and description visit the <a href="../../../reference/administration_reference/">reference docs</a></p> <h3 id="customisation-dashboard-view">Customisation: dashboard view<a class="headerlink" href="#customisation-dashboard-view" title="Permanent link">¶</a></h3> <p>The dashboard view (also known as index view) is a first page that administrator sees after loging into the administration panel.</p> <p><img alt="" src="../img/administration/administration_dashboard.png" /></p> <p>For simple customisations, dashboard view can be overridden by adding new Jinja template in your local instance, as follows: <code>templates/invenio_administration/index.html</code>.</p> <p>In case of more complex use cases, the dashboard view can be configured by creating a view that inherits from the <code>AdminView</code> and updating the config variable <code>ADMINISTRATION_DASHBOARD_VIEW</code> with the new declared view.</p> <div class="highlight"><pre><span></span><code><span class="n">ADMINISTRATION_DASHBOARD_VIEW</span> <span class="o">=</span> <span class="p">(</span> <span class="s2">"invenio_administration.views.dashboard.AdminDashboardView"</span> <span class="p">)</span> </code></pre></div> <h3 id="customisation-jinja-templates">Customisation: Jinja templates<a class="headerlink" href="#customisation-jinja-templates" title="Permanent link">¶</a></h3> <p>The views are defined by Jinja templates, and this can be easily extendable and overridable by redefining their blocks.</p> <p>If you would like to customize any of the exising default administration views, you can do so by overriding their Jinja templates, for each type of the view can be overridden by using the Jinja's inheritance:</p> <div class="highlight"><pre><span></span><code><span class="cm"><!-- Details view --></span> {% extends "invenio_administration/details.html" %} <span class="cm"><!-- Edit view --></span> {% extends "invenio_administration/edit.html" %} <span class="cm"><!-- Search view --></span> {% extends "invenio_administration/search.html" %} <span class="cm"><!-- Create view --></span> {% extends "invenio_administration/create.html" %} <span class="cm"><!-- Dashboard view --></span> {% extends "invenio_administration/index.html" %} </code></pre></div> <p>In each view you can override or extend different blocks, mainly there are 2 blocks that can be overridden to display our custom content:</p> <ul> <li><code>admin_page_content</code>: Content of each view. It's present in all the views.</li> <li><code>JavaScript</code>: Main block to place any JavaScript content.</li> </ul> <div class="highlight"><pre><span></span><code>{% extends "invenio_administration/details.html" %} {% block admin_page_content %} {# MY custom content #} {% endblock admin_page_content %} {% block javascript %} # don't forget the parent JS assets! {{ super() }} # don't forget to add proper assets to your template {{ webpack['invenio-administration-search.js'] }} {% endblock %} </code></pre></div> <p>More information about <code>blocks</code> and template inheritance is available in <a href="https://Jinja.palletsprojects.com/en/3.0.x/templates">Jinja documentation</a>. To find more about the different blocks that can be overridden in each of the views you can check the code of the views <a href="https://github.com/inveniosoftware/invenio-administration/tree/main/invenio_administration/templates/semantic-ui/invenio_administration">here</a>.</p> <h3 id="customisation-react-components">Customisation: React components<a class="headerlink" href="#customisation-react-components" title="Permanent link">¶</a></h3> <p>In addition to Jinja, in each view there is the possibility to overwrite single building block of the UI - React components. If you would like to, for example, change layout of the default view, you can create your own React component to display the view.</p> <p>Create a js file (<code>MyComponent.js</code>) containing your custom component, which you have to place in <code>/assets/js</code> folder of your module.</p> <div class="highlight"><pre><span></span><code><span class="kd">class</span><span class="w"> </span><span class="nx">MyComponent</span><span class="w"> </span><span class="k">extends</span><span class="w"> </span><span class="nx">Component</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">render</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="s2">"Hello World!"</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> <span class="kd">const</span><span class="w"> </span><span class="nx">domContainer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s2">"invenio-details-config"</span><span class="p">);</span> <span class="nx">domContainer</span><span class="w"> </span><span class="o">&&</span> <span class="w"> </span><span class="nx">ReactDOM</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span> <span class="w"> </span><span class="o"><</span><span class="nx">MyComponent</span><span class="w"> </span><span class="o">/></span><span class="p">,</span> <span class="w"> </span><span class="nx">domContainer</span> <span class="w"> </span><span class="p">);</span> </code></pre></div> <p>Add the <code>.js</code> file as webpack entry - inside <code>webpack.py</code> file of your module:</p> <div class="highlight"><pre><span></span><code>theme = WebpackThemeBundle( <span class="w"> </span> __name__, <span class="w"> </span> "assets", <span class="w"> </span> default="semantic-ui", <span class="w"> </span> themes={ <span class="w"> </span> "semantic-ui": dict( <span class="w"> </span> entry={ <span class="gi">+ "my-component":</span> <span class="gi">+ "./js/path/to/my/new/file/MyComponent.js",</span> <span class="w"> </span> ... </code></pre></div> <p>Once the file was added as webpack entry, we can add it to the template we are overriding. Make sure webpack.py file is registered as entry point in your module.</p> <div class="highlight"><pre><span></span><code>{% extends "invenio_administration/details.html" %} {% block admin_page_content %} <span class="p"><</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">"invenio-details-config"</span> <span class="p">></span> <span class="p"></</span><span class="nt">div</span><span class="p">></span> {% endblock admin_page_content %} {% block javascript %} # don't forget the parent JS assets! {{ super() }} # make sure the name of the asset matches the name you registered in the webpack entry {{ webpack['my-component.js'] }} {% endblock %} </code></pre></div> <p>Make sure unique html tag ID in your <code>.js</code> file and Jinja template match.</p> <p>If you need to overwrite only the React components in your view (without customising Jinja templates) - you can skip the step above, and use one of the existing DOM elements identifiers:</p> <ul> <li><code>invenio_administration/create.html</code> -> id="<strong>invenio-administration-create-root</strong>"</li> <li><code>invenio_administration/details.html</code> -> id="<strong>invenio-details-config</strong>"</li> <li><code>invenio_administration/edit.html</code> -> id="<strong>invenio-administration-edit-root</strong>"</li> <li><code>invenio_administration/search.html</code> -> id="<strong>invenio-search-config</strong>"</li> </ul> <h3 id="permissions">Permissions<a class="headerlink" href="#permissions" title="Permanent link">¶</a></h3> <p>Only users with action <code>administration-access</code> granted are allowed to access the Invenio Administration panel. This new permission's action has been introduced in InvenioRDM v10.0.0.</p> <p>There are two ways to grant this permission:</p> <ol> <li> <p>Permission can be added using a role:</p> <div class="highlight"><pre><span></span><code><span class="w"> </span><span class="c1"># make sure you are inside your instance's directory</span> <span class="w"> </span><span class="nb">cd</span><span class="w"> </span>my-site <span class="w"> </span><span class="c1"># Create a role named administration</span> <span class="w"> </span>pipenv<span class="w"> </span>run<span class="w"> </span>invenio<span class="w"> </span>roles<span class="w"> </span>create<span class="w"> </span>administration <span class="w"> </span><span class="c1"># Allow access to administration to the administration role</span> <span class="w"> </span>pipenv<span class="w"> </span>run<span class="w"> </span>invenio<span class="w"> </span>access<span class="w"> </span>allow<span class="w"> </span>administration-access<span class="w"> </span>role<span class="w"> </span>administration <span class="w"> </span><span class="c1"># Add administration role to an user email</span> <span class="w"> </span>pipenv<span class="w"> </span>run<span class="w"> </span>invenio<span class="w"> </span>roles<span class="w"> </span>add<span class="w"> </span><user_email><span class="w"> </span>administration </code></pre></div> </li> <li> <p>Permission can be added to a specific user:</p> <div class="highlight"><pre><span></span><code><span class="w"> </span><span class="c1"># Grant access to a specific user to the action administration-access</span> <span class="w"> </span>pipenv<span class="w"> </span>run<span class="w"> </span>invenio<span class="w"> </span>access<span class="w"> </span>allow<span class="w"> </span>administration-access<span class="w"> </span>user<span class="w"> </span><user_email> </code></pre></div> </li> </ol> <h3 id="admin-actions-permissions">Admin actions permissions<a class="headerlink" href="#admin-actions-permissions" title="Permanent link">¶</a></h3> <p>Any request endpoint which is handled by administration panel (creating a resource, editing a resource, featuring a community, etc.), must have <code>Administration()</code> permission added, for example:</p> <div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">invenio_administration.generators</span> <span class="kn">import</span> <span class="n">Administration</span> <span class="kn">from</span> <span class="nn">invenio_records_permissions</span> <span class="kn">import</span> <span class="n">BasePermissionPolicy</span> <span class="k">class</span> <span class="nc">OAIPMHServerPermissionPolicy</span><span class="p">(</span><span class="n">BasePermissionPolicy</span><span class="p">):</span> <span class="w"> </span><span class="sd">"""OAI-PMH permission policy."""</span> <span class="n">can_read</span> <span class="o">=</span> <span class="p">[</span><span class="n">Administration</span><span class="p">()]</span> <span class="n">can_create</span> <span class="o">=</span> <span class="p">[</span><span class="n">Administration</span><span class="p">()]</span> <span class="n">can_delete</span> <span class="o">=</span> <span class="p">[</span><span class="n">Administration</span><span class="p">()]</span> <span class="n">can_update</span> <span class="o">=</span> <span class="p">[</span><span class="n">Administration</span><span class="p">()]</span> <span class="n">can_read_format</span> <span class="o">=</span> <span class="p">[</span><span class="n">Administration</span><span class="p">()]</span> </code></pre></div> <h4 id="custom-permissions">Custom permissions<a class="headerlink" href="#custom-permissions" title="Permanent link">¶</a></h4> <p>You can customize your individual permissions per view by overwriting <code>decorators</code> class attribute as shown below (see also <a href="https://flask.palletsprojects.com/en/2.2.x/views/#view-decorators">Flask class based views documentation</a>).</p> <div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">invenio_administration.permissions</span> <span class="kn">import</span> <span class="n">administration_permission</span> <span class="k">class</span> <span class="nc">MyView</span><span class="p">:</span> <span class="n">decorators</span> <span class="o">=</span> <span class="p">[</span><span class="n">administration_permission</span><span class="o">.</span><span class="n">require</span><span class="p">(</span><span class="n">http_exception</span><span class="o">=</span><span class="mi">403</span><span class="p">)]</span> </code></pre></div> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="../theming/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Theming"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> Theming </div> </div> </a> <a href="../../howtos/i18n/" class="md-footer__link md-footer__link--next" aria-label="Next: Translation (i18n)"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Translation (i18n) </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2019-2024 CERN, Northwestern University and contributors. </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> </div> <div class="md-social"> <a href="https://github.com/inveniosoftware" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.tabs", "navigation.footer", "content.code.copy"], "search": "../../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src="../../../assets/javascripts/bundle.525ec568.min.js"></script> </body> </html>