{"title":"Fíordheimhniú a shaincheapadh i Django","version":"6.0","locale":"ga","docname":"topics/auth/customizing","url":"/ga/6.0/topics/auth/customizing/","canonical":"https://djangodocs.dev/ga/6.0/topics/auth/customizing/","summary":"Tá an fíordheimhniú a thagann le Django go maith go leor don chuid is mó de na cásanna coitianta, ach b'fhéidir go mbeidh riachtanais agat nach gcomhlíonann na…","html":"<h1>Fíordheimhniú a shaincheapadh i Django<a class=\"heading-anchor\" href=\"#customizing-authentication-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Tá an fíordheimhniú a thagann le Django go maith go leor don chuid is mó de na cásanna coitianta, ach b'fhéidir go mbeidh riachtanais agat nach gcomhlíonann na réamhshocruithe lasmuigh den bhosca. Éilíonn fíordheimhniú a shaincheapadh i do thionscadail tuiscint a fháil ar na pointí den chóras atá curtha ar fáil atá inleathnaithe nó Soláthraíonn an doiciméad seo sonraí faoi conas is féidir an córas auth a shaincheapadh.</p>\n<p><a class=\"reference internal\" href=\"#authentication-backends\"><span class=\"std std-ref\">Authentication backends</span></a> provide an extensible\nsystem for when a username and password stored with the user model need to be\nauthenticated against a different service than Django's default.</p>\n<p>Is féidir leat do mhúnlaí:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>ceadanna saincheaptha &lt;custom-permissions&gt;`a thabhairt ar féidir a sheiceáil trí chóras údaraithe Django.</p>\n<p>&lt;auth-custom-user&gt;Is féidir leat: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>an tsamhail réamhshocraithe <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a><a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>Úsáideoir &lt;extending-user&gt;``a leathnú, nó:ref: <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>samhail iomlán saincheaptha a chur in ionad <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">`</span></a>.</p>\n<section id=\"other-authentication-sources\">\n<span id=\"authentication-backends\"></span><h2>Foinsí fíordheimhnithe eile<a class=\"heading-anchor\" href=\"#other-authentication-sources\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>B'fhéidir go mbeidh uaireanta go mbeidh gá duit dul isteach i bhfoinse fíordheimhnithe eile - is é sin, foinse eile ainmneacha úsáideora agus pasfhocail nó modhanna fíordheimhnithe.</p>\n<p>Mar shampla, b'fhéidir go bhfuil socrú LDAP ag do chuideachta cheana féin a stóráilíonn ainm úsáideora agus pasfhocal do gach fostaí. Bheadh sé ina fhadhb don riarthóir líonra agus do na húsáideoirí féin araon dá mbeadh cuntais ar leithligh ag úsáideoirí in LDAP agus sna feidhmchláir bhunaithe ar Django.</p>\n<p>Mar sin, chun cásanna mar seo a láimhseáil, ligeann córas fíordheimhnithe Django duit foinsí fíordheimhnithe eile a phlugáil isteach. Is féidir leat scéim réamhshocraithe bunaithe ar bhunachar sonraí Django a shárú, nó is féidir leat an córas réamhshocraithe a úsáid i dteannta le córais eile.</p>\n<p>Féach an:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>tagairt cúltaca fíordheimhniúcháin &lt;authentication-backends-reference&gt;`le haghaidh faisnéise faoi na cúltaca fíordheimhnithe atá san áireamh le Django.</p>\n<section id=\"specifying-authentication-backends\">\n<h3>Cúlpháirtithe fíordheimhnithe<a class=\"heading-anchor\" href=\"#specifying-authentication-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Behind the scenes, Django maintains a list of &quot;authentication backends&quot; that it\nchecks for authentication. When somebody calls\n<a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.authenticate()</span></code></a> -- as described in <a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#how-to-log-a-user-in\"><span class=\"std std-ref\">How to log\na user in</span></a> -- Django tries authenticating across\nall of its authentication backends. If the first authentication method fails,\nDjango tries the second one, and so on, until all backends have been attempted.</p>\n<p>Sonraítear liosta na gcúltaca fíordheimhnithe atá le húsáid sa shocrú:: AUTHENTICATION_BACKENDS. Ba chóir go mbeadh sé seo ina liosta d'ainmneacha cosáin Python a chuireann in iúl ar ranganna Python a bhfuil a fhios acu conas a fhí Is féidir leis na ranganna seo a bheith áit ar bith ar do chonair Python.</p>\n<p>De réir réamhshocraithe, tá :setting: AUTHENTICATION_BACKENDS socraithe go:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">[</span><span class=\"s2\">&quot;django.contrib.auth.backends.ModelBackend&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>Sin an cúltaca fíordheimhnithe bunúsach a sheiceálann bunachar sonraí úsáideoirí Django agus a cheistionn na ceadanna ionsuite. Ní sholáthraíonn sé cosaint i gcoinne ionsaithe brute force trí aon mheicníocht teorannaithe rátaí. Féadfaidh tú do mheicníocht teorannaithe rátaí féin a chur i bhfeidhm i gcúl saincheaptha auth, nó na meicníochtaí a sholáthraíonn mórchuid na bhfreastalaithe gréasáin a úsáid</p>\n<p>Tá an t-ordú de:setting: AUTHENTICATION_BACKENDS tábhachtach, mar sin má tá an t-ainm úsáideora agus an pasfhocal céanna bailí i gcúltaca iolracha, stopfaidh Django le próiseáil ag an gcéad chluiche dearfach.</p>\n<p>Má ardaíonn cúltaca eisceacht a:class: ~django.core.exceptions.permissiondenied, teipeann ar fhíordheimhniú láithreach. Ní sheiceálfaidh Django na cúltaca a leanann.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Nuair a bheidh úsáideoir fíordheimhnithe, stóráilíonn Django cén cúltaca a úsáideadh chun an t-úsáideoir a fhíordheimhniú i seisiún an úsáideora, agus athúsáideann sé an cúltaca céanna ar feadh ré an tseisiúin sin aon uair a bhíonn rochtain ar an úsáideoir fíordheimhnithe faoi láthair. Ciallaíonn sé seo go héifeachtach go ndéantar foinsí fíordheimhnithe a stóráil ar bhonn in aghaidh na seisiúin, mar sin má athraíonn tú: socrú: AUTHENTICATION_BACKENDS, beidh ort sonraí seisiúin a ghlanadh más gá duit iallach a chur ar úsáideoirí athfhíordheimhniú ag úsáid modhanna éagsúla. Bealach simplí chun é sin a dhéanamh ná <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Session.Objects.all () .delete () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a fhorghníomhú.</p>\n</aside>\n</section>\n<section id=\"writing-an-authentication-backend\">\n<h3>Cúlcheann fíordheimhnithe a scríobh<a class=\"heading-anchor\" href=\"#writing-an-authentication-backend\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>&lt;authorization_methods&gt;Is aicme é cúltaca fíordheimhnithe a chuireann dhá mhodh riachtanacha i bhfeidhm: <code class=\"docutils literal notranslate\"><span class=\"pre\">get_user</span> <span class=\"pre\">(user_id)</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``fíordheimhniú</span> <span class=\"pre\">(iarraidh,</span> <span class=\"pre\">**dintiúir)</span></code>, chomh maith le sraith cead roghnach a bhaineann le:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>modhanna údaraithe <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>Tógann an modh <code class=\"docutils literal notranslate\"><span class=\"pre\">get_user</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">user_id</span></code> -- a d'fhéadfadh a bheith ina ainm úsáideora, ID bunachar sonraí nó cibé rud, ach caithfidh gurb é a bheith mar phríomh-eochair do réad úsáideora -- agus filleann sé réad úsáideora nó <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n<p>Glacann an modh <code class=\"docutils literal notranslate\"><span class=\"pre\">fíordheimhniú`</span> <span class=\"pre\">argóint</span> <span class=\"pre\">agus</span> <span class=\"pre\">dintiúir</span> <span class=\"pre\">``iarrata</span></code> mar argóintí eochairfhocal. An chuid is mó den am, beidh cuma seo air:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.backends</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseBackend</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyBackend</span><span class=\"p\">(</span><span class=\"n\">BaseBackend</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">authenticate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">username</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Check the username/password and return a user.</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Ach d'fhéadfadh sé comhartha a fhíordheimhniú freisin, mar sin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.backends</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseBackend</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyBackend</span><span class=\"p\">(</span><span class=\"n\">BaseBackend</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">authenticate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Check the token and return a user.</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Ar aon bhealach, ba cheart do <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>fíordheimhniú () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>na dintiúir a fhaigheann sé a sheiceáil agus réad úsáideora a mheaitseálann na dintiúir sin a thabhairt ar ais má tá na dintiúir bail Mura bhfuil siad bailí, ba chóir dó <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>None <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>a thabhairt ar ais.</p>\n<p>Is é <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> an:class: ~django.http.httpRequest agus d'fhéadfadh sé a bheith <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> mura gcuirfí ar fáil é chuig:func: ~django.contrib.auth.auth.autenticate (a chuireann ar aghaidh chuig an gcúltaca é).</p>\n<p>&lt;user-objects&gt;Tá riarachán Django ceangailte go docht leis an Django: ref: Réad úsáideora `. Mar shampla, chun rochtain a fháil ar an riarachán, caithfidh :attr: `.user.is_staff agus:attr: .user.is_active a bheith <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> (féach: .adminsite.has_permission le haghaidh sonraí).</p>\n<p>Is é an bealach is fearr le déileáil leis seo ná réad Django <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a chruthú do gach úsáideoir atá ann do chúltaca (m.sh., i do eolaire LDAP, do bhunachar sonraí SQL seachtrach, srl.). Is féidir leat script a scríobh chun é seo a dhéanamh roimh ré, nó is féidir le do mhodh “fíordheimhnithe” é a dhéanamh an chéad uair a logálann úsáideoir isteach.</p>\n<p>Seo cúltaca sampla a fhíordheimhníonn i gcoinne athróg ainm úsáideora agus pasfhocal atá sainmhínithe i do chomhad settings.py agus a chruthaíonn réad Django <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an chéad uair a fhíordheimhníonn úsáideoir. Sa sampla seo, is sárúsáideoir é an réad Django <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>Úsáideoir <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>a chruthaítear a bheidh rochtain iomlán aige ar an riarachán:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.backends</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseBackend</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.hashers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">check_password</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SettingsBackend</span><span class=\"p\">(</span><span class=\"n\">BaseBackend</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Authenticate against the settings ADMIN_LOGIN and ADMIN_PASSWORD.</span>\n\n<span class=\"sd\">    Use the login name and a hash of the password. For example:</span>\n\n<span class=\"sd\">    ADMIN_LOGIN = &#39;admin&#39;</span>\n<span class=\"sd\">    ADMIN_PASSWORD = &#39;pbkdf2_sha256$30000$Vo0VlMnkR4Bk$qEvtdyZRWTcOsCnI/oQ7fVOu1XAURIZYoOZ3iq8Dr4M=&#39;</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">authenticate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">username</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">login_valid</span> <span class=\"o\">=</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">ADMIN_LOGIN</span> <span class=\"o\">==</span> <span class=\"n\">username</span>\n        <span class=\"n\">pwd_valid</span> <span class=\"o\">=</span> <span class=\"n\">check_password</span><span class=\"p\">(</span><span class=\"n\">password</span><span class=\"p\">,</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">ADMIN_PASSWORD</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">login_valid</span> <span class=\"ow\">and</span> <span class=\"n\">pwd_valid</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"n\">username</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Create a new user. There&#39;s no need to set a password</span>\n                <span class=\"c1\"># because only the password from settings.py is checked.</span>\n                <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"n\">username</span><span class=\"p\">)</span>  <span class=\"c1\"># is_active defaults to True.</span>\n                <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_staff</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n                <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n                <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"n\">user</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_user</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">user_id</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">user_id</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n</code></pre></div>\n</section>\n<section id=\"handling-authorization-in-custom-backends\">\n<span id=\"authorization-methods\"></span><h3>Údarú láimhseála i gcúltaca saincheap<a class=\"heading-anchor\" href=\"#handling-authorization-in-custom-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir le cúltaca saincheaptha auth a gceadanna féin a sholáthar.</p>\n<p>The user model and its manager will delegate permission lookup functions\n(<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.get_user_permissions\" title=\"django.contrib.auth.models.User.get_user_permissions\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_user_permissions()</span></code></a>,\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.get_group_permissions\" title=\"django.contrib.auth.models.User.get_group_permissions\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_group_permissions()</span></code></a>,\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.get_all_permissions\" title=\"django.contrib.auth.models.User.get_all_permissions\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_all_permissions()</span></code></a>,\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.has_perm\" title=\"django.contrib.auth.models.User.has_perm\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_perm()</span></code></a>,\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.has_module_perms\" title=\"django.contrib.auth.models.User.has_module_perms\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_module_perms()</span></code></a>, and\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.UserManager.with_perm\" title=\"django.contrib.auth.models.UserManager.with_perm\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">with_perm()</span></code></a>) to any\nauthentication backend that implements these functions.</p>\n<p>Is iad na ceadanna a thugtar don úsáideoir ná superset de na ceadanna go léir a chuireann gach cúltaca ar ais. Is é sin, tugann Django cead d'úsáideoir a dheonaíonn aon chúltaca amháin.</p>\n<p>If a backend raises a <a class=\"reference internal\" href=\"/ga/6.0/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a>\nexception in <a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.has_perm\" title=\"django.contrib.auth.models.User.has_perm\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_perm()</span></code></a> or\n<a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.has_module_perms\" title=\"django.contrib.auth.models.User.has_module_perms\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">has_module_perms()</span></code></a>, the authorization\nwill immediately fail and Django won't check the backends that follow.</p>\n<p>D'fhéadfadh cúltaca ceadanna a chur i bhfeidhm don riarachán draíochta mar seo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.backends</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseBackend</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MagicAdminBackend</span><span class=\"p\">(</span><span class=\"n\">BaseBackend</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">has_perm</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">user_obj</span><span class=\"p\">,</span> <span class=\"n\">perm</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">user_obj</span><span class=\"o\">.</span><span class=\"n\">username</span> <span class=\"o\">==</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">ADMIN_LOGIN</span>\n</code></pre></div>\n<p>Tugann sé seo ceadanna iomlána don úsáideoir a deonaíodh rochtain sa sampla thuas. Tabhair faoi deara, chomh maith leis na hargóintí céanna a thugtar do na feidhmeanna comhcheangail:class: Django.Contrib.Auth.Models.User, glacann na feidhmeanna cúltaca an réad úsáideora, a d'fhéadfadh a bheith ina úsáideoir gan ainm, mar argóint.</p>\n<p>Is féidir cur i bhfeidhm iomlán údaraithe a fháil sa rang <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code> in:source: django/contrib/auth/backends.py, arb é an cúltaca réamhshocraithe agus fiosraíonn sé an tábla auth_permission` an chuid is mó den am.</p>\n<section id=\"authorization-for-anonymous-users\">\n<span id=\"anonymous-auth\"></span><h4>Údarú d'úsáideoirí gan ainm<a class=\"heading-anchor\" href=\"#authorization-for-anonymous-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Is é úsáideoir gan ainm ceann nach bhfuil fíordheimhnithe i.e. níor sholáthraíonn siad aon sonraí fíordheimhnithe bailí. Mar sin féin, ní gá go gciallaíonn sé sin nach bhfuil údaraithe acu aon rud a dhéanamh. Ag an leibhéal is bunúsaí, údaraíonn an chuid is mó de na suíomhanna Gréasáin úsáideoirí gan ainm an chuid is mó den suíomh a bhrabhsáil, agus ceadaíonn go leor tuairimí a phostá</p>\n<p>Níl áit ag creat ceada Django chun ceadanna a stóráil d'úsáideoirí gan ainm. Mar sin féin, b'fhéidir gurb é an réad úsáideora a chuirtear chuig cúltaca fíordheimhnithe ná: class: django.contrib.auth.models.anonymousUser réad, rud a ligeann don chúltaca iompar údaraithe saincheaptha a shonrú d'úsáideoirí gan ainm. Tá sé seo úsáideach go háirithe d'údair aipeanna in-athúsáidte, ar féidir leo gach ceist údaraithe a tharmligean chuig an gcúltaca auth, seachas socruithe a theastaíonn uathu, mar shampla, chun rochtain gan ainm a rialú.</p>\n</section>\n<section id=\"authorization-for-inactive-users\">\n<span id=\"inactive-auth\"></span><h4>Údarú d'úsáideoirí neamhriach<a class=\"heading-anchor\" href=\"#authorization-for-inactive-users\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Is é úsáideoir neamhghníomhach ceann a bhfuil a réimse ai:attr: ~django.contrib.auth.models.user.is_active socraithe go <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Cuireann an: Class: ~django.contrib.auth.backends.modelBackend agus:class: ~django.contrib.auth.backends.remoteUserBackend cosc ar na húsáideoirí seo fíordheimhniú. Mura bhfuil réimse: attr: ~django.contrib.auth.models.customUser.is_active ag samhail úsáideora saincheaptha, beidh cead ag gach úsáideoir fíordheimhniú.</p>\n<p>Is féidir leat:class: ~django.contrib.auth.backends.allowAllUsersModelBackend nó:class: ~django.contrib.auth.backends.allowAllUsersRemoteUserBackend más mian leat ligean d'úsáideoirí neamhghníomhacha a fhíordheimhniú.</p>\n<p>Ligeann an tacaíocht d'úsáideoirí gan ainm sa chóras ceada cás ina bhfuil ceadanna ag úsáideoirí gan ainm rud éigin a dhéanamh agus nach ndéanann úsáideoirí fíordheimhnithe neamhghníomhacha.</p>\n<p>Ná déan dearmad tástáil a dhéanamh ar thréith <code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code> an úsáideora i do mhodhanna ceada cúltaca féin.</p>\n</section>\n<section id=\"handling-object-permissions\">\n<h4>Ceadanna réad a láimh<a class=\"heading-anchor\" href=\"#handling-object-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Tá bunús ag creat ceada Django do cheadanna réada, cé nach bhfuil aon chur i bhfeidhm dó sa chroí. Ciallaíonn sé sin go gcuirfidh seiceáil ceadanna réada ar ais i gcónaí False` nó liosta folamh (ag brath ar an seiceáil a dhéantar). Gheobhaidh cúltaca fíordheimhnithe na paraiméadair eochairfhocal <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">user_obj</span></code> do gach modh údaraithe a bhaineann le réad agus féadfaidh sé cead leibhéal an réada a thabhairt ar ais de réir mar is cuí.</p>\n</section>\n</section>\n</section>\n<section id=\"custom-permissions\">\n<span id=\"id1\"></span><h2>Ceadanna saincheaptha<a class=\"heading-anchor\" href=\"#custom-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>&lt;meta-options&gt;Chun ceadanna saincheaptha a chruthú do réad samhail ar leith, bain úsáid as an <code class=\"docutils literal notranslate\"><span class=\"pre\">permissions</span></code>:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>model Meta tréith <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>Cruthaíonn an tsamhail Task` sampla seo dhá chead saincheaptha, ie gníomhartha is féidir le húsáideoirí nó nach féidir le húsáideoirí a dhéanamh le cásanna <code class=\"docutils literal notranslate\"><span class=\"pre\">Task</span></code>, go sonrach le d'iarratas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Task</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">permissions</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;change_task_status&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Can change the status of tasks&quot;</span><span class=\"p\">),</span>\n            <span class=\"p\">(</span><span class=\"s2\">&quot;close_task&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Can remove a task by setting its status as closed&quot;</span><span class=\"p\">),</span>\n        <span class=\"p\">]</span>\n</code></pre></div>\n<p>Is é an t-aon rud a dhéanann sé seo na ceadanna breise sin a chruthú nuair a rith tú: djadmin: manage.py migration &lt;migrate&gt;`(tá an fheidhm a chruthaíonn ceadanna ceangailte leis an gcomhartha: data: `~django.db.models.signals.post_migrate). Tá do chód i gceannas ar luach na gceadanna seo a sheiceáil nuair a bhíonn úsáideoir ag iarraidh rochtain a fháil ar an bhfeidhmiúlacht a sholáthraíonn an feidhmchlár (stádas tascanna a athrú nó cúraimí a dhúnadh.) Ag leanúint leis an sampla thuas, seiceálann na seiceálacha seo a leanas más féidir le húsáideoir tascanna</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s2\">&quot;app.close_task&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"extending-the-existing-user-model\">\n<span id=\"extending-user\"></span><h2>An tsamhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>atá ann cheana a leathnú<a class=\"heading-anchor\" href=\"#extending-the-existing-user-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá dhá bhealach ann chun an tsamhail réamhshocraithe: class: ~django.contrib.auth.models.user a leathnú gan do mhúnla féin a chur in ionad. Más iompraíochta amháin iad na hathruithe a theastaíonn uait, agus mura dteastaíonn aon athrú uathu ar an méid atá stóráilte sa bhunachar sonraí, is féidir leat a:ref: samhail seachfhreastala a chruthú bun &lt;proxy-models&gt;aithe ar:class: ~django.contrib.auth.models.user. Ligeann sé seo aon cheann de na gnéithe a thairgeann samhlacha seachfhreastalaí lena n-áirítear ordú réamhshocraithe, bainisteoirí saincheaptha nó modhanna</p>\n<p>Más mian leat faisnéis a bhaineann le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a stóráil, is féidir leat a:class: ~django.db.models.onetoonefield a úsáid chuig samhail ina bhfuil na réimsí le haghaidh faisnéise breise. Is minic a thugtar samhail phróifíle ar an tsamhail duine le duine seo, mar d'fhéadfadh sé faisnéis neamh-aitheantais a stóráil faoi úsáideoir láithreáin. Mar shampla d'fhéadfá samhail Fostaithe a chruthú:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Employee</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">department</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ag glacadh leis an bhFostaí atá ann cheana Fred Smith a bhfuil samhail Úsáideora agus Fostaithe aige, is féidir leat rochtain a fháil ar an bhfaisnéis ghaolmhar ag baint úsáide as coinbhinsiúin</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">u</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s2\">&quot;fsmith&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">freds_department</span> <span class=\"o\">=</span> <span class=\"n\">u</span><span class=\"o\">.</span><span class=\"n\">employee</span><span class=\"o\">.</span><span class=\"n\">department</span>\n</code></pre></div>\n<p>Chun réimsí samhail phróifíle a chur leis an leathanach úsáideora sa admin, sainmhínigh an:class: ~django.contrib.admin.inlineModelAdmin (don shampla seo, úsáidfimid a:class: ~django.contrib.admin.stackedInline) i admin.py` d'aip agus cuirfimid le rang <code class=\"docutils literal notranslate\"><span class=\"pre\">UserAdmin</span></code> atá cláraithe leis an aip aicme: ~django.contrib.auth.models.user aicme:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UserAdmin</span> <span class=\"k\">as</span> <span class=\"n\">BaseUserAdmin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">my_user_profile_app.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Employee</span>\n\n\n<span class=\"c1\"># Define an inline admin descriptor for Employee model</span>\n<span class=\"c1\"># which acts a bit like a singleton</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EmployeeInline</span><span class=\"p\">(</span><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">StackedInline</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Employee</span>\n    <span class=\"n\">can_delete</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;employee&quot;</span>\n\n\n<span class=\"c1\"># Define a new User admin</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UserAdmin</span><span class=\"p\">(</span><span class=\"n\">BaseUserAdmin</span><span class=\"p\">):</span>\n    <span class=\"n\">inlines</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">EmployeeInline</span><span class=\"p\">]</span>\n\n\n<span class=\"c1\"># Re-register UserAdmin</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">unregister</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">)</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">,</span> <span class=\"n\">UserAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Níl na samhlacha próifíle seo speisialta ar bhealach ar bith - níl siad ach samhlacha Django a bhfuil nasc duine le duine acu le samhail úsáideora. Mar sin, ní chruthaítear iad go huathoibríoch nuair a chruthaítear úsáideoir, ach a: attr: d'fhéadfaí django.db.models.signals.post_save a úsáid chun samhlacha gaolmhara a chruthú nó a nuashonrú de réir mar is cuí.</p>\n<p>Mar thoradh ar mhúnlaí gaolmhara a úsáid tá ceisteanna breise nó páirtí chun na sonraí gaolmhara Ag brath ar do riachtanais, d'fhéadfadh samhail úsáideora saincheaptha a chuimsíonn na réimsí gaolmhara a bheith mar do rogha níos fearr, áfach, d'fhéadfadh caidreamh atá ann cheana leis an tsamhail úsáideora réamhshocraithe laistigh d'aipeanna do thionscadail údar</p>\n</section>\n<section id=\"substituting-a-custom-user-model\">\n<span id=\"auth-custom-user\"></span><h2>Samhail saincheaptha <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a><a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>Úsáideoir <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>a chur in ionad<a class=\"heading-anchor\" href=\"#substituting-a-custom-user-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>D'fhéadfadh riachtanais fíordheimhnithe a bheith ag roinnt cineálacha tionscadail nach bhfuil samhail ionsuite Django: ~django.contrib.auth.models.User oiriúnach i gcónaí. Mar shampla, ar roinnt suíomhanna bíonn sé níos ciallmhaire seoladh ríomhphoist a úsáid mar do chomhartha aitheantais in ionad ainm úsáideora.</p>\n<p>Ligeann Django duit an tsamhail úsáideora réamhshocraithe a shárú trí luach a sholáthar don socrú: setting: AUTH_USER_MODEL a thagann tagairt do mhúnla saincheaptha:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">AUTH_USER_MODEL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;myapp.MyUser&quot;</span>\n</code></pre></div>\n<p>Déanann an péire poncaigh seo cur síos ar: attr: ~django.apps.appconfig.label den aip Django (a chaithfidh a bheith i do: setting: INSTALLED_APPS), agus ainm an tsamhail Django is mian leat a úsáid mar do mhúnla úsáideora.</p>\n<section id=\"using-a-custom-user-model-when-starting-a-project\">\n<h3>Múnla úsáideora saincheaptha a úsáid agus tionscadal á thosú<a class=\"heading-anchor\" href=\"#using-a-custom-user-model-when-starting-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má tá tionscadal nua á thosú agat, is féidir leat samhail úsáideora saincheaptha a chur ar bun a iompraíonn go cosúil leis an tsamhail úsáideora réamhshocraithe trí fho-aicmiú:class: ~django.contrib.auth.models.abstractUser:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">AbstractUser</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">User</span><span class=\"p\">(</span><span class=\"n\">AbstractUser</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n</code></pre></div>\n<p>Ná déan dearmad a chur in iúl: setting: AUTH_USER_MODEL dó. Déan é seo sula gcruthaítear aon imirce nó sula rith <code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code> den chéad uair.</p>\n<p>Chomh maith leis sin, cláraigh an tsamhail i admin.py` an aip:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UserAdmin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">User</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">User</span><span class=\"p\">,</span> <span class=\"n\">UserAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"changing-to-a-custom-user-model-mid-project\">\n<h3>Athrú go samhail úsáideora saincheaptha lár-thionscadail<a class=\"heading-anchor\" href=\"#changing-to-a-custom-user-model-mid-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Athraithe:SETTING: AUTH_USER_MODEL is féidir tar éis duit táblaí bunachar sonraí a chruthú, ach féadann sé a bheith casta, ós rud é go mbíonn tionchar aige ar eochracha eachtracha agus ar chaidrimh go leor, mar shampla.</p>\n<p>Ní féidir an t-athrú seo a dhéanamh go huathoibríoch agus éilíonn sé do scéim a shocrú de láimh, do chuid sonraí a bhogadh ón sean-tábla úsáideora, agus b'fhéidir roinnt imirce a athchur de láimh. Féach: ticéad: 25313 le haghaidh imlíne ar na céimeanna.</p>\n<p>Mar gheall ar theorainneacha ar ghné spleáchais dhinimiciúil Django do mhúnlaí inmhalartaithe, caithfear an tsamhail dá dtagraí:setting: AUTH_USER_MODEL a chruthú sa chéad imirce dá aip (ar a dtugtar 0001_initial` de ghnáth); ar shlí eile, beidh saincheisteanna spleáchais agat.</p>\n<p>Ina theannta sin, féadfaidh tú rith isteach i “CircularDependencyError” agus tú ag rith d'imirce mar ní bheidh Django in ann an lúb spleáchais a bhriseadh go huathoibríoch mar gheall ar an spleáchas dinimiciúil. Má fheiceann tú an earráid seo, ba cheart duit an lúb a bhriseadh tríd na samhlacha a mbraitheann do mhúnla úsáideora orthu a bhogadh isteach sa dara imirce. (Is féidir leat triail a bhaint as dhá ghnáthshamhail a dhéanamh a bhfuil “ForeignKey'” acu lena chéile agus a fheiceáil conas a réitíonn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>makemigrations` an spleáchas ciorclach sin más mian leat a fheiceáil conas a dhéantar é de ghnáth.)</p>\n</section>\n<section id=\"reusable-apps-and-auth-user-model\">\n<h3>Aipeanna in-athúsáidte agus <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>AUTH_USER_MODEL ``<a class=\"heading-anchor\" href=\"#reusable-apps-and-auth-user-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Níor cheart d'aipeanna in-athúsáidte samhail úsáideora saincheaptha a chur Féadfaidh tionscadal go leor aipeanna a úsáid, agus ní fhéadfaí dhá aip in-athúsáidte a chuir samhail úsáideora saincheaptha i bhfeidhm a úsáid le chéile. Más gá duit faisnéis in aghaidh an úsáideora a stóráil i d'aip, bain úsáid as a:class: ~django.db.models.foreignKey nó:class: ~django.db.models.onetoonefield go <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.auth_user_model</span></code> mar a thuairiscítear thíos.</p>\n</section>\n<section id=\"referencing-the-user-model\">\n<h3>Ag tagairt don tsamhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir ``<a class=\"heading-anchor\" href=\"#referencing-the-user-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má thagraíonn tú: class: ~django.contrib.auth.models.user go díreach (mar shampla, trí thagairt dó i eochair eachtrach), ní oibreoidh do chód i dtionscadail ina n-athraíodh an socrú: AUTH_USER_MODEL go samhail úsáideora difriúil.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.get_user_model\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_user_model</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.get_user_model\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>In ionad tagairt a dhéanamh do:class: ~django.contrib.auth.models.user go díreach, ba cheart duit tagairt a dhéanamh don tsamhail úsáideora ag baint úsáide as <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>django.contrib.auth.get_user_model () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Tabharfaidh an modh seo an tsamhail úsáideora atá gníomhach faoi láthair ar ais - an tsamhail úsáideora saincheaptha má shonraítear ceann amháin, nó: class: ~django.contrib.auth.models.user ar shlí eile.</p>\n<p>Nuair a shainmhíníonn tú eochair eachtrach nó caidreamh go leor leis an tsamhail úsáideora, ba cheart duit an tsamhail saincheaptha a shonrú ag baint úsáide as an socrú: setting: AUTH_USER_MODEL. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Article</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>Agus tú ag nascadh le comharthaí a sheolann an tsamhail úsáideora, ba cheart duit an tsamhail saincheaptha a shonrú ag baint úsáide as an socrú: setting: AUTH_USER_MODEL. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">post_save</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post_save_receiver</span><span class=\"p\">(</span><span class=\"n\">sender</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"p\">,</span> <span class=\"n\">created</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"n\">post_save</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">post_save_receiver</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Go ginearálta, is éasca tagairt a dhéanamh don tsamhail úsáideora leis an socrú: “AUTH_USER_MODEL” sa chód a fhorghníomhaítear ag am allmhairithe, áfach, is féidir glaoch ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>get_user_model () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>agus Django ag allmhairiú samhlacha, ionas gur féidir leat <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>Models.foreignKey (get_user_model (),...) <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>a úsáid.</p>\n<p>Má dhéantar tástáil ar d'aip le samhlacha úsáideora iolracha, ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;override_settings</span> <span class=\"pre\">(AUTH_USER_MODEL</span> <span class=\"pre\">=...)</span></code> mar shampla, agus má dhéanann tú taisce toradh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_user_model () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>in athróg leibhéal modúl, b'fhéidir go mbeidh ort éisteacht leis an gcomhartha: data: ~django.test.signals.setting_changed chun an taisce a ghlanadh. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">apps</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">get_user_model</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">setting_changed</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.dispatch</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">receiver</span>\n\n\n<span class=\"nd\">@receiver</span><span class=\"p\">(</span><span class=\"n\">setting_changed</span><span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">user_model_swapped</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"p\">,</span> <span class=\"n\">setting</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">setting</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;AUTH_USER_MODEL&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">clear_cache</span><span class=\"p\">()</span>\n        <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">some_module</span>\n\n        <span class=\"n\">some_module</span><span class=\"o\">.</span><span class=\"n\">UserModel</span> <span class=\"o\">=</span> <span class=\"n\">get_user_model</span><span class=\"p\">()</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"specifying-a-custom-user-model\">\n<span id=\"specifying-custom-user-model\"></span><h3>Samhail úsáideora saincheaptha a shonrú<a class=\"heading-anchor\" href=\"#specifying-a-custom-user-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nuair a thosaíonn tú do thionscadal le samhail úsáideora saincheaptha, stad chun machnamh a dhéanamh an é seo an rogha ceart do do thionscadal.</p>\n<p>Ag coinneáil gach faisnéis a bhaineann le húsáideoirí i samhail amháin, cuirtear an gá le ceisteanna bunachar sonraí breise nó níos casta chun samhlacha gaolmhara Ar an láimh eile, b'fhéidir go mbeadh sé níos oiriúnaí faisnéis úsáideora atá sonrach le aip a stóráil i samhail a bhfuil gaol aige le do mhúnla úsáideora saincheaptha. Ligeann sé sin do gach aip a riachtanais sonraí úsáideora féin a shonrú gan toimhdeanna a d'fhéadfadh aipeanna eile a d'fhéadfadh a bheith contrártha Ciallaíonn sé freisin go gcoinneoidh tú do mhúnla úsáideora chomh simplí agus is féidir, dírithe ar fhíordheimhniú, agus ag leanúint na n-íosriachtanais ag súil go gcomhlíonfaidh Django samhlacha úsáideora</p>\n<p>Má úsáideann tú an cúltaca fíordheimhnithe réamhshocraithe, ansin caithfidh réimse uathúil amháin a bheith ag do mhúnla is féidir a úsáid chun críocha aitheantais. Is féidir leis seo a bheith ina ainm úsáideora, seoladh ríomhphoist, nó aon tréith uathúil eile. Ceadaítear réimse ainm úsáideora neamh-uathúil má úsáideann tú cúltaca fíordheimhnithe saincheaptha ar féidir leo tacú leis.</p>\n<p>Is é an bealach is éasca chun samhail úsáideora saincheaptha comhlíontach a thógáil ná oidhreacht ó:class: ~django.contrib.auth.models.AbstractBaseUser. :class: ~django.contrib.auth.models.AbstractBaseUser soláthraíonn croífheidhmiú samhail úsáideora, lena n-áirítear pasfhocail hashed agus athshocruithe pasfhocal tokenized. Ní mór duit roinnt príomhshonraí cur chun feidhme a sholáthar ansin:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">CustomUser</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser.USERNAME_FIELD\">\n<span class=\"sig-name descname\"><span class=\"pre\">USERNAME_FIELD</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser.USERNAME_FIELD\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Sreang a chuireann síos ar ainm an réimse ar an tsamhail úsáideora a úsáidtear mar an aitheantóir uathúil. De ghnáth is ainm úsáideora de chineál éigin é seo, ach is féidir leis a bheith ina sheoladh ríomhphoist, nó aon aitheantóir uathúil eile. Caithfidh an réimse** a bheith uathúil (m.sh. go bhfuil Unique=True` socraithe ina sainmhíniú), mura n-úsáideann tú cúltaca fíordheimhnithe saincheaptha atá in ann tacú le hainmneacha úsáideora neamh-uathúla.</p>\n<p>Sa sampla seo a leanas, úsáidtear an réimse <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>aitheantóir` mar an réimse aitheantais:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyUser</span><span class=\"p\">(</span><span class=\"n\">AbstractBaseUser</span><span class=\"p\">):</span>\n    <span class=\"n\">identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">USERNAME_FIELD</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;identifier&quot;</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser.EMAIL_FIELD\">\n<span class=\"sig-name descname\"><span class=\"pre\">EMAIL_FIELD</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser.EMAIL_FIELD\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Sreang a thugann cur síos ar ainm an réimse ríomhphoist ar an tsamhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Cuirtear an luach seo ar ais ag: meth: ~Models.AbstractBaseUser.get_email_field_name.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser.REQUIRED_FIELDS\">\n<span class=\"sig-name descname\"><span class=\"pre\">REQUIRED_FIELDS</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser.REQUIRED_FIELDS\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Liosta de na hainmneacha réimse a spreagfar agus úsáideoir á chruthú tríd an ordú bainistíochta: djadmin: createsuperuser. Spreagfar an t-úsáideoir luach a sholáthar do gach ceann de na réimsí seo. Caithfidh sé aon réimse a áireamh ina bhfuil: attr: ~django.db.models.field.blank <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> nó neamhshainithe agus féadfaidh sé réimsí breise a bheith san áireamh gur mhaith leat a spreagadh dóibh nuair a chruthaítear úsáideoir idirghníomhach. Níl aon éifeacht ag <code class=\"docutils literal notranslate\"><span class=\"pre\">REQUIRED_FIELDS</span></code> i gcodanna eile de Django, cosúil le húsáideoir a chruthú sa riarachán.</p>\n<p>Mar shampla, seo an sainmhíniú páirteach ar mhúnla úsáideora a shainmhíníonn dhá réimse riachtanacha - dáta breithe agus airde:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyUser</span><span class=\"p\">(</span><span class=\"n\">AbstractBaseUser</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">date_of_birth</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">height</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">()</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">REQUIRED_FIELDS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;height&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Ní mór go mbeadh na réimsí riachtanacha go léir ar do mhúnla úsáideora ag <code class=\"docutils literal notranslate\"><span class=\"pre\">REQUIRED_FIELDS</span></code> ach níor chóir go mbeadh an <code class=\"docutils literal notranslate\"><span class=\"pre\">USERNAME_FIELD</span></code> nó <code class=\"docutils literal notranslate\"><span class=\"pre\">PASFHOCAL</span></code> ann mar a spreagfar na réimsí seo i gcónaí.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser.is_active\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_active</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser.is_active\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A boolean attribute that indicates whether the user is considered\n&quot;active&quot;. This attribute is provided as an attribute on\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code> defaulting to <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. How you choose to\nimplement it will depend on the details of your chosen auth backends.\nSee the documentation of the <a class=\"reference internal\" href=\"/ga/6.0/ref/contrib/auth/#django.contrib.auth.models.User.is_active\" title=\"django.contrib.auth.models.User.is_active\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_active</span> <span class=\"pre\">attribute</span> <span class=\"pre\">on</span> <span class=\"pre\">the</span> <span class=\"pre\">built-in</span>\n<span class=\"pre\">user</span> <span class=\"pre\">model</span></code></a> for details.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser.get_full_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_full_name</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser.get_full_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Roghnach. Aitheantóir foirmiúil níos faide don úsáideoir amhail a n-ainm iomlán. Má chuirtear i bhfeidhm é, tá sé seo le feiceáil in éineacht leis an ainm úsáideora i stair réad in:mod: django.contrib.admin.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUser.get_short_name\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_short_name</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUser.get_short_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Roghnach. Aitheantóir gairid neamhfhoirmiúil don úsáideoir amhail a gcéadainm. Má chuirtear i bhfeidhm, cuireann sé seo in ionad an t-ainm úsáideora sa bheannacht chuig an úsáideoir i gceannteideal de:mod: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>django.contrib.admin <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</dd></dl>\n\n<aside class=\"admonition-importing-abstractbaseuser admonition\">\n<p class=\"admonition-title\">Iompórtáil <code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code></p>\n<p>Is féidir <code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseUserManager</span></code> a iompórtáil ó <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.base_user</span></code> ionas gur féidir iad a allmhairiú gan <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth</span></code> a áireamh in:setting: INSTALLED_APPS.</p>\n</aside>\n</dd></dl>\n\n<p>Tá na tréithe agus na modhanna seo a leanas ar fáil ar aon fho-aicme de:class: ~django.contrib.auth.models.abstractBaseUser:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">AbstractBaseUser</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.get_username\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_username</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.get_username\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann luach an réimse ainmnithe ag <code class=\"docutils literal notranslate\"><span class=\"pre\">USERNAME_FIELD</span></code> ar ais.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.clean\">\n<span class=\"sig-name descname\"><span class=\"pre\">clean</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.clean\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Normalizíonn an t-ainm úsáideora trí ghlaoch: meth: normalize_username. Má sháraigh tú an modh seo, bí cinnte glaoch ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>super () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>chun an normalú a choinneáil.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.get_email_field_name\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">get_email_field_name</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.get_email_field_name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann ainm an réimse ríomhphoist a shonraítear leis an tréith: attr: ~Models.CUSTOMUSER.EMAIL_FIELD ar ais. Réamhshocraithe go <code class=\"docutils literal notranslate\"><span class=\"pre\">'r-phost'</span></code> mura sonraítear <code class=\"docutils literal notranslate\"><span class=\"pre\">EMAIL_FIELD</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.normalize_username\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">normalize_username</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">username</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.normalize_username\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cuireann normalú Unicode NFKC i bhfeidhm ar ainmneacha úsáideora ionas go measfar carachtair comhionann ó thaobh amhairc a bhfuil pointí cód Unicode éagsúla acu mar</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.is_authenticated\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_authenticated</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.is_authenticated\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tréith léite amháin atá <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> i gcónaí (seachas <code class=\"docutils literal notranslate\"><span class=\"pre\">AnonymousUser.is_Authenticated</span></code> atá <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> i gcónaí). Is bealach é seo chun a rá an bhfuil an t-úsáideoir fíordheimhnithe. Ní thugann sé seo le tuiscint ar aon cheadanna agus ní sheiceálann sé an bhfuil an t-úsáideoir gníomhach nó an bhfuil seisiún bailí aige. Cé go seiceálfaidh tú an tréith seo de ghnáth ar request.user` chun a fháil amach an bhfuil sé áitithe ag an:class: ~django.contrib.auth.middleware.AuthenticationMiddleware (a léiríonn an t-úsáideoir logáilte isteach faoi láthair), ba chóir go mbeadh a fhios agat gurb é an tréith seo True` d'aon shampla: ~Models.User.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.is_anonymous\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_anonymous</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.is_anonymous\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tréith léitheoireachta amháin atá i gcónaí <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>. Is bealach é seo chun rudaí: class: ~Models.User agus:class: ~Models.anonymousUser a idirdhealú. Go ginearálta, ba cheart duit úsáid a bhaint as: attr: ~Models.User.is_Authenticated leis an tréith seo.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.set_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw_password</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.set_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Socraíonn pasfhocal an úsáideora chuig an sreang amh a thugtar, ag tabhairt aire don hashing pasfhocal. Ní shábhálann sé an réad:class: ~django.contrib.auth.Models.AbstractBaseUser.</p>\n<p>When the raw_password is <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, the password will be set to an\nunusable password, as if\n<a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractBaseUser.set_unusable_password\" title=\"django.contrib.auth.models.AbstractBaseUser.set_unusable_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_unusable_password()</span></code></a>\nwere used.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.check_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">check_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw_password</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.check_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.acheck_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">acheck_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw_password</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.acheck_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Leagan asincrón</em>: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>acheck_password () ``</p>\n<p>Tugann sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> más é an teaghrán amh a thugtar an focal faire ceart don úsáideoir. (Tugann sé seo aire don hashing pasfhocal agus an comparáid a dhéanamh.)</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.set_unusable_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">set_unusable_password</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.set_unusable_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Marks the user as having no password set. This isn't the same as\nhaving a blank string for a password.\n<a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractBaseUser.check_password\" title=\"django.contrib.auth.models.AbstractBaseUser.check_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">check_password()</span></code></a> for\nthis user will never return <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>. Doesn't save the\n<a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code></a> object.</p>\n<p>B'fhéidir go mbeidh sé seo ag teastáil uait má tharlaíonn fíordheimhniú d'iarratas i gcoinne foinse sheachtrach atá ann cheana mar eolaire LDAP.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.has_usable_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_usable_password</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.has_usable_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> if\n<a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractBaseUser.set_unusable_password\" title=\"django.contrib.auth.models.AbstractBaseUser.set_unusable_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_unusable_password()</span></code></a>\nhas been called for this user.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_session_auth_hash</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé HMAC ar an réimse pasfhocal ar ais. Úsáidtear le haghaidh: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>seision-invalidation-on-pasfho-athraithe'.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractBaseUser.get_session_auth_fallback_hash\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_session_auth_fallback_hash</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractBaseUser.get_session_auth_fallback_hash\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé HMAC an réimse pasfhocal ag baint úsáid:setting: SECRET_KEY_FALLBACKS. Úsáidtear ag <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_user () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractUser\" title=\"django.contrib.auth.models.AbstractUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AbstractUser</span></code></a> subclasses <a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractBaseUser\" title=\"django.contrib.auth.models.AbstractBaseUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AbstractBaseUser</span></code></a>:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractUser\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">AbstractUser</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractUser\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.AbstractUser.clean\">\n<span class=\"sig-name descname\"><span class=\"pre\">clean</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.AbstractUser.clean\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Déanann an ríomhphost a normalú trí ghlaoch: meth: .baseUserManager.Normalize_email. Má sháraigh tú an modh seo, bí cinnte glaoch ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>super () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>chun an normalú a choinneáil.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"writing-a-manager-for-a-custom-user-model\">\n<h3>Bainisteoir a scríobh le haghaidh samhail úsáideora saincheaptha<a class=\"heading-anchor\" href=\"#writing-a-manager-for-a-custom-user-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ba chóir duit bainisteoir saincheaptha a shainiú do do mhúnla úsáideora freisin. Má shainmhíníonn do mhúnla úsáideora réimsí <code class=\"docutils literal notranslate\"><span class=\"pre\">username</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code>, is_staff`, is_active`, is_superuser`, <code class=\"docutils literal notranslate\"><span class=\"pre\">last_login</span></code>, agus <code class=\"docutils literal notranslate\"><span class=\"pre\">date_joined</span></code> mar an gcéanna le húsáideoir réamhshocraithe Django, is féidir leat Djangos:class: ~django.contrib.auth.models.Bainisteoir '; áfach, má shainmhíníonn do mhúnla úsáideora réimsí éagsúla, beidh ort bainisteoir saincheaptha a shainiú a leathnaí:class: `~django.contrib.auth.models.baseUserManager ag soláthar dhá mhodh breise:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUserManager\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">CustomUserManager</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUserManager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUserManager.create_user\">\n<span class=\"sig-name descname\"><span class=\"pre\">create_user</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">username_field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">other_fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUserManager.create_user\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ba chóir go nglacfadh fréamhshamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">create_user</span> <span class=\"pre\">()</span> <span class=\"pre\">``leis</span> <span class=\"pre\">an</span> <span class=\"pre\">réimse</span> <span class=\"pre\">ainm</span> <span class=\"pre\">úsáideora,</span> <span class=\"pre\">móide</span> <span class=\"pre\">gach</span> <span class=\"pre\">réimse</span> <span class=\"pre\">riachtanach</span> <span class=\"pre\">mar</span> <span class=\"pre\">argóintí.</span> <span class=\"pre\">Mar</span> <span class=\"pre\">shampla,</span> <span class=\"pre\">má</span> <span class=\"pre\">úsáideann</span> <span class=\"pre\">do</span> <span class=\"pre\">mhúnla</span> <span class=\"pre\">úsáideora</span> <span class=\"pre\">```email</span></code> mar réimse an ainm úsáideora, agus má tá <code class=\"docutils literal notranslate\"><span class=\"pre\">date_of_birth</span></code> aige mar réimse riachtanach, ansin ba chóir <code class=\"docutils literal notranslate\"><span class=\"pre\">create_user</span></code> a shainiú mar:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create_user</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">email</span><span class=\"p\">,</span> <span class=\"n\">date_of_birth</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"c1\"># create user here</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.CustomUserManager.create_superuser\">\n<span class=\"sig-name descname\"><span class=\"pre\">create_superuser</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">username_field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">other_fields</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.CustomUserManager.create_superuser\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ba chóir go nglacfadh fréamhshamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">create_superuser</span> <span class=\"pre\">()</span> <span class=\"pre\">``leis</span> <span class=\"pre\">an</span> <span class=\"pre\">réimse</span> <span class=\"pre\">ainm</span> <span class=\"pre\">úsáideora,</span> <span class=\"pre\">móide</span> <span class=\"pre\">gach</span> <span class=\"pre\">réimse</span> <span class=\"pre\">riachtanach</span> <span class=\"pre\">mar</span> <span class=\"pre\">argóintí.</span> <span class=\"pre\">Mar</span> <span class=\"pre\">shampla,</span> <span class=\"pre\">má</span> <span class=\"pre\">úsáideann</span> <span class=\"pre\">do</span> <span class=\"pre\">mhúnla</span> <span class=\"pre\">úsáideora</span> <span class=\"pre\">```email</span></code> mar réimse an ainm úsáideora, agus má tá <code class=\"docutils literal notranslate\"><span class=\"pre\">date_of_birth</span></code> aige mar réimse riachtanach, ansin ba chóir <code class=\"docutils literal notranslate\"><span class=\"pre\">create_superuser</span></code> a shainiú mar:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create_superuser</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">email</span><span class=\"p\">,</span> <span class=\"n\">date_of_birth</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"c1\"># create superuser here</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n</dd></dl>\n\n</dd></dl>\n\n<p>Maidir le a:class: ~.FOREIGNKEY in:attr: .USERNAME_FIELD nó:attr: .REQUIRED_FIELDS, faigheann na modhanna seo luach na:attr: ~.FOREIGNKEY.TO_FIELD (the:attr: ~django.db.models.field.primary_key de réir réamhshocraithe) de shampla atá ann cheana.</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.models.BaseUserManager\" title=\"django.contrib.auth.models.BaseUserManager\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BaseUserManager</span></code></a> provides the following\nutility methods:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.BaseUserManager\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">BaseUserManager</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.BaseUserManager\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.BaseUserManager.normalize_email\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">normalize_email</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">email</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.BaseUserManager.normalize_email\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Déanann seoltaí ríomhphoist a normalú trí chuid fearainn den seoladh ríomhphoist a íoslaghdú.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.BaseUserManager.get_by_natural_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_by_natural_key</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">username</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.BaseUserManager.get_by_natural_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.BaseUserManager.aget_by_natural_key\">\n<span class=\"sig-name descname\"><span class=\"pre\">aget_by_natural_key</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">username</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.BaseUserManager.aget_by_natural_key\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynchronous version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aget_by_natural_key()</span></code></p>\n<p>Aisghabhann sé sampla úsáideora ag baint úsáide as ábhar an réimse atá ainmnithe ag <code class=\"docutils literal notranslate\"><span class=\"pre\">USERNAME_FIELD</span></code>.</p>\n<aside class=\"version-note version-changed\" data-version=\"5.2\">\n<p class=\"version-note-title\">Changed in Django 5.2</p><p><code class=\"docutils literal notranslate\"><span class=\"pre\">aget_by_natural_key()</span></code> method was added.</p>\n</aside>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"extending-django-s-default-user\">\n<h3>Réamhshocraithe <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>Django a leathnú<a class=\"heading-anchor\" href=\"#extending-django-s-default-user\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má tá tú sásta go hiomlán le samhail Django:Class: ~django.contrib.auth.models.user, ach gur mhaith leat roinnt faisnéise próifíle breise a chur leis, d'fhéadfá subclass:class: django.contrib.auth.models.abstractUser agus do réimsí próifíl saincheaptha a chur leis, cé go mholfaimis samhail ar leithligh mar a thuairiscítear in:ref: specifying-custom-user-model. &lt;abstract-base-classes&gt;Soláthraíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">AbstractUser</span></code> cur i bhfeidhm iomlán an réamhshocraithe:class: ~django.contrib.auth.models.user mar an:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>samhail teibí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</section>\n<section id=\"custom-users-and-the-built-in-auth-forms\">\n<span id=\"id2\"></span><h3>Úsáideoirí saincheaptha agus na foirmeacha auth ionsuite<a class=\"heading-anchor\" href=\"#custom-users-and-the-built-in-auth-forms\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Déanann ionsuite Django: ref: fo &lt;built-in-auth-forms&gt;irmeacha `agus:ref: `tuairimí toimhdeanna áirithe faoin t &lt;built-in-auth-views&gt;samhail úsáideora a bhfuil siad ag obair leis.</p>\n<p>Tá na foirmeacha seo a leanas comhoiriúnach le haon fho-aicme de:class: ~django.contrib.auth.Models.AbstractBaseUser:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.AuthenticationForm\" title=\"django.contrib.auth.forms.AuthenticationForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AuthenticationForm</span></code></a>: Uses the username\nfield specified by <a class=\"reference internal\" href=\"#django.contrib.auth.models.CustomUser.USERNAME_FIELD\" title=\"django.contrib.auth.models.CustomUser.USERNAME_FIELD\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">USERNAME_FIELD</span></code></a>.</p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.SetPasswordForm\" title=\"django.contrib.auth.forms.SetPasswordForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SetPasswordForm</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.PasswordChangeForm\" title=\"django.contrib.auth.forms.PasswordChangeForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PasswordChangeForm</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.AdminPasswordChangeForm\" title=\"django.contrib.auth.forms.AdminPasswordChangeForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AdminPasswordChangeForm</span></code></a></p></li>\n</ul>\n<p>Déanann na foirmeacha seo a leanas toimhde faoin tsamhail úsáideora agus is féidir iad a úsáid mar atá má chomhlíontar na toimhdeanna sin:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.PasswordResetForm\" title=\"django.contrib.auth.forms.PasswordResetForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PasswordResetForm</span></code></a>: Assumes that the user\nmodel has a field that stores the user's email address with the name returned\nby <a class=\"reference internal\" href=\"#django.contrib.auth.models.AbstractBaseUser.get_email_field_name\" title=\"django.contrib.auth.models.AbstractBaseUser.get_email_field_name\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get_email_field_name()</span></code></a> (<code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> by\ndefault) that can be used to identify the user and a boolean field named\n<code class=\"docutils literal notranslate\"><span class=\"pre\">is_active</span></code> to prevent password resets for inactive users.</p></li>\n</ul>\n<p>Faoi dheireadh, tá na foirmeacha seo a leanas ceangailte len:class: ~django.contrib.auth.models.user agus ní mór iad a athscríobh nó a leathnú chun oibriú le samhail úsáideora saincheaptha:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.UserCreationForm\" title=\"django.contrib.auth.forms.UserCreationForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UserCreationForm</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ga/6.0/topics/auth/default/#django.contrib.auth.forms.UserChangeForm\" title=\"django.contrib.auth.forms.UserChangeForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UserChangeForm</span></code></a></p></li>\n</ul>\n<p>Más fo-aicme de <code class=\"docutils literal notranslate\"><span class=\"pre\">Abstractuser</span></code> é do mhúnla úsáideora saincheaptha, ansin is féidir leat na foirmeacha seo a leathnú ar an mbealach seo:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UserCreationForm</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">CustomUser</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomUserCreationForm</span><span class=\"p\">(</span><span class=\"n\">UserCreationForm</span><span class=\"p\">):</span>\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">(</span><span class=\"n\">UserCreationForm</span><span class=\"o\">.</span><span class=\"n\">Meta</span><span class=\"p\">):</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">CustomUser</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"n\">UserCreationForm</span><span class=\"o\">.</span><span class=\"n\">Meta</span><span class=\"o\">.</span><span class=\"n\">fields</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"s2\">&quot;custom_field&quot;</span><span class=\"p\">,)</span>\n</code></pre></div>\n</section>\n<section id=\"custom-users-and-django-contrib-admin\">\n<h3>Úsáideoirí saincheaptha agus:mod: django.contrib.admin<a class=\"heading-anchor\" href=\"#custom-users-and-django-contrib-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Más mian leat go n-oibreoidh do mhúnla úsáideora saincheaptha leis an riarachán freisin, caithfidh do mhúnla úsáideora roinnt tréithe agus modhanna breise a shainiú. Ligeann na modhanna seo don riarachán rochtain an úsáideora ar ábhar riaracháin a rialú:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">CustomUser</span></span></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.is_staff\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_staff</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.is_staff\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> má cheadaítear don úsáideoir rochtain a bheith aige ar an suíomh riaracháin.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.is_active\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_active</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.is_active\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> má tá an cuntas úsáideora gníomhach faoi láthair.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_perm(perm,</span> <span class=\"pre\">obj=None):</span></span></dt>\n<dd><p>Tugann sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> má tá an cead ainmnithe ag an úsáideoir. Má chuirtear obj` ar fáil, ní mór an cead a sheiceáil i gcoinne cás réad ar leith.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_module_perms(app_label):</span></span></dt>\n<dd><p>Tugann sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> má tá cead ag an úsáideoir rochtain a fháil ar mhúnlaí san aip ar leith.</p>\n</dd></dl>\n\n<p>Beidh ort freisin do mhúnla úsáideora saincheaptha a chlárú leis an riarachán. Má leathnaíonn do mhúnla úsáideora saincheaptha <code class=\"docutils literal notranslate\"><span class=\"pre\">Django.Contrib.Auth.Models.AbstractUser</span></code>, is féidir leat rang <code class=\"docutils literal notranslate\"><span class=\"pre\">Django.Contrib.Auth.Admin.UserAdmin</span></code> atá ann cheana Django a úsáid. Mar sin féin, má leathnaíonn do mhúnla úsáideora: class: ~django.contrib.auth.Models.AbstractBaseUser, beidh ort rang saincheaptha <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin`</span> <span class=\"pre\">a</span> <span class=\"pre\">shainiú.</span> <span class=\"pre\">B'fhéidir</span> <span class=\"pre\">go</span> <span class=\"pre\">mbeadh</span> <span class=\"pre\">sé</span> <span class=\"pre\">indéanta</span> <span class=\"pre\">an</span> <span class=\"pre\">réamhshocraithe</span> <span class=\"pre\">``Django.Contrib.Auth.Admin.UserAdmin</span></code> a fho-aicmiú; áfach, beidh ort aon cheann de na sainmhínithe a thagraíonn do réimsí ar Django.Contrib.Auth.Models.AbstractUser` nach bhfuil ar do rang úsáideora saincheaptha.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Má tá tú ag úsáid saincheaptha <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code> is fo-aicme de Django.contrib.auth.admin.userAdmin`, ansin ní mór duit do réimsí saincheaptha a chur le fieldsets` (le haghaidh réimsí le húsáid chun úsáideoirí in eagarthóireacht) agus <code class=\"docutils literal notranslate\"><span class=\"pre\">add_fieldsets</span></code> (le haghaidh réimsí le húsáid agus úsáideoir á chruthú). Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UserAdmin</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">CustomUserAdmin</span><span class=\"p\">(</span><span class=\"n\">UserAdmin</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">fieldsets</span> <span class=\"o\">=</span> <span class=\"n\">UserAdmin</span><span class=\"o\">.</span><span class=\"n\">fieldsets</span> <span class=\"o\">+</span> <span class=\"p\">((</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;custom_field&quot;</span><span class=\"p\">]}),)</span>\n    <span class=\"n\">add_fieldsets</span> <span class=\"o\">=</span> <span class=\"n\">UserAdmin</span><span class=\"o\">.</span><span class=\"n\">add_fieldsets</span> <span class=\"o\">+</span> <span class=\"p\">((</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;custom_field&quot;</span><span class=\"p\">]}),)</span>\n</code></pre></div>\n<p>Féach: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>sampla iomlán &lt;custom-users-admin-full-example&gt;`le haghaidh tuilleadh sonraí.</p>\n</aside>\n</section>\n<section id=\"custom-users-and-permissions\">\n<h3>Úsáideoirí agus ceadanna saincheaptha<a class=\"heading-anchor\" href=\"#custom-users-and-permissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Chun go mbeidh sé éasca creat ceada Django a áireamh i do rang úsáideora féin, soláthraíonn Django: class: ~django.contrib.auth.models.permissionsMixin. Is samhail teibí é seo is féidir leat a áireamh san ordlathas ranga do do mhúnla úsáideora, ag tabhairt na modhanna agus na réimsí bunachar sonraí go léir atá riachtanach duit chun tacú le samhail ceada Django.</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.auth.models.PermissionsMixin\" title=\"django.contrib.auth.models.PermissionsMixin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PermissionsMixin</span></code></a> provides the following\nmethods and attributes:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">PermissionsMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.is_superuser\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_superuser</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.is_superuser\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Boolean. Ainmníonn sé go bhfuil gach cead ag an úsáideoir seo gan iad a shannadh go sainráite.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.get_user_permissions\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_user_permissions</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.get_user_permissions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Filleann sé tacar teaghráin ceadanna atá ag an úsáideoir go díreach.</p>\n<p>Má chuirtear <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> isteach, ní thugann sé ach ceadanna úsáideora don réad sonrach seo ar ais.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.get_group_permissions\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_group_permissions</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.get_group_permissions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé tacar teaghráin ceada atá ag an úsáideoir ar ais, trína ngrúpaí.</p>\n<p>Má chuirtear <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> isteach, ní thugann sé ach ceadanna grúpa don réad sonrach seo ar ais.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.get_all_permissions\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_all_permissions</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.get_all_permissions\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé tacar teaghráin ceada atá ag an úsáideoir ar ais, trí cheadanna grúpa agus úsáideora araon.</p>\n<p>Má chuirtear <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> isteach, ní thugann sé ach na ceadanna don réad sonrach seo ar ais.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.has_perm\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_perm</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">perm</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.has_perm\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&lt;app label&gt;Tugann <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> ar ais má tá an cead sonraithe ag an úsáideoir, áit a bhfuil <code class=\"docutils literal notranslate\"><span class=\"pre\">perm</span></code> sa fhormáid <code class=\"docutils literal notranslate\"><span class=\"pre\">”.</span> <span class=\"pre\">&lt;permission</span> <span class=\"pre\">codename&gt;&lt;topic-authorization&gt;“``(féach:ref:</span> <span class=\"pre\">`ceadanna</span> <span class=\"pre\">`).</span> <span class=\"pre\">Má</span> <span class=\"pre\">tá:</span> <span class=\"pre\">attr:</span> <span class=\"pre\">`.user.is_active`</span> <span class=\"pre\">agus:attr:</span> <span class=\"pre\">`~.user.is_superuser`</span> <span class=\"pre\">araon</span> <span class=\"pre\">``True</span></code>, filleann an modh seo <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> i gcónaí.</p>\n<p>Má chuirtear <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> isteach, ní sheiceálfaidh an modh seo cead don tsamhail, ach don réad sonrach seo.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.has_perms\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_perms</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">perm_list</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">obj</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.has_perms\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>&lt;app label&gt;Tugann sé “True” ar ais má tá gach ceann de na ceadanna sonraithe ag an úsáideoir, áit a bhfuil gach perm sa fhormáid <code class=\"docutils literal notranslate\"><span class=\"pre\">”.</span> <span class=\"pre\">&lt;permission</span> <span class=\"pre\">codename&gt;“</span></code>. Má tá: attr: .user.is_active agus:attr: ~.user.is_superuser araon <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, filleann an modh seo <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> i gcónaí.</p>\n<p>Má chuirtear <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span></code> isteach, ní sheiceálfaidh an modh seo ceadanna don tsamhail, ach don réad ar leith.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.models.PermissionsMixin.has_module_perms\">\n<span class=\"sig-name descname\"><span class=\"pre\">has_module_perms</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">package_name</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.models.PermissionsMixin.has_module_perms\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> má tá aon cheadanna ag an úsáideoir sa phacáiste tugtha (lipéad an aip Django). Má tá: attr: .user.is_active agus:attr: ~.user.is_superuser araon <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, filleann an modh seo <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> i gcónaí.</p>\n</dd></dl>\n\n</dd></dl>\n\n<aside class=\"admonition-permissionsmixin-and-modelbackend admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">PermissionsMixin</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code></p>\n<p>Mura gcuireann tú an: class: ~django.contrib.auth.models.permissionsMixin san áireamh, ní mór duit a chinntiú nach gcuireann tú na modhanna ceadanna ar ModelBackend`. Glacann <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code> leis go bhfuil réimsí áirithe ar fáil ar do mhúnla úsáideora. Mura soláthraíonn do mhúnla úsáideora na réimsí sin, gheobhaidh tú earráidí bunachar sonraí nuair a sheiceálann tú ceadanna.</p>\n</aside>\n</section>\n<section id=\"custom-users-and-proxy-models\">\n<h3>Úsáideoirí saincheaptha agus samhlacha seachta<a class=\"heading-anchor\" href=\"#custom-users-and-proxy-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Teorainn amháin ar mhúnlaí úsáideora saincheaptha is ea go mbriseofar samhail úsáideora saincheaptha aon mhúnla seachfhreastalaí:class: ~django.contrib.auth.models.user. Caithfidh samhlacha seachfhreastalaí a bheith bunaithe ar rang bonn coincréite; trí mhúnla úsáideora saincheaptha a shainiú, baineann tú cumas Django an bunaicme a aithint go hiontaofa.</p>\n<p>Má úsáideann do thionscadal samhlacha seachfhreastalaí, ní mór duit an seachfhreastalaí a mhodhnú chun an tsamhail úsáideora atá in úsáid i do thionscadal a leathnú, nó iompar do sheachfhreastalaí a chumasc i d'fho-aicme: ~django.contrib.auth.models.user.</p>\n</section>\n<section id=\"a-full-example\">\n<span id=\"custom-users-admin-full-example\"></span><h3>Sampla iomlán<a class=\"heading-anchor\" href=\"#a-full-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Seo sampla d'aip úsáideora saincheaptha a chomhlíonann riarachán. Úsáideann an tsamhail úsáideora seo seoladh ríomhphoist mar an t-ainm úsáideora, agus tá dáta breithe riachtanach aige; ní sholáthraíonn sé aon chead seiceáil thar bhratach <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>admin <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ar an gcuntas úsáideora. Bheadh an tsamhail seo comhoiriúnach leis na foirmeacha agus na tuairimí auth ionsuite go léir, ach amháin na foirmeacha cruthaithe úsáideora. Léiríonn an sampla seo an chaoi a n-oibríonn an chuid is mó de na comhpháirteanna le chéile, ach níl sé beartaithe iad a chóipeáil go díreach i dtionscadail</p>\n<p>Bheadh an cód seo go léir ina gcónaí i gcomhad models.py d'aip fíordheimhnithe saincheaptha:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseUserManager</span><span class=\"p\">,</span> <span class=\"n\">AbstractBaseUser</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyUserManager</span><span class=\"p\">(</span><span class=\"n\">BaseUserManager</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create_user</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">email</span><span class=\"p\">,</span> <span class=\"n\">date_of_birth</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Creates and saves a User with the given email, date of</span>\n<span class=\"sd\">        birth and password.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">email</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">ValueError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Users must have an email address&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"p\">(</span>\n            <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">normalize_email</span><span class=\"p\">(</span><span class=\"n\">email</span><span class=\"p\">),</span>\n            <span class=\"n\">date_of_birth</span><span class=\"o\">=</span><span class=\"n\">date_of_birth</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">set_password</span><span class=\"p\">(</span><span class=\"n\">password</span><span class=\"p\">)</span>\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_db</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">user</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">create_superuser</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">email</span><span class=\"p\">,</span> <span class=\"n\">date_of_birth</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n<span class=\"w\">        </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Creates and saves a superuser with the given email, date of</span>\n<span class=\"sd\">        birth and password.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">create_user</span><span class=\"p\">(</span>\n            <span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"n\">password</span><span class=\"p\">,</span>\n            <span class=\"n\">date_of_birth</span><span class=\"o\">=</span><span class=\"n\">date_of_birth</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_admin</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_db</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">user</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyUser</span><span class=\"p\">(</span><span class=\"n\">AbstractBaseUser</span><span class=\"p\">):</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">(</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;email address&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span>\n        <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">date_of_birth</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">is_active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">is_admin</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">MyUserManager</span><span class=\"p\">()</span>\n\n    <span class=\"n\">USERNAME_FIELD</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;email&quot;</span>\n    <span class=\"n\">REQUIRED_FIELDS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">email</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">has_perm</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">perm</span><span class=\"p\">,</span> <span class=\"n\">obj</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"s2\">&quot;Does the user have a specific permission?&quot;</span>\n        <span class=\"c1\"># Simplest possible answer: Yes, always</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">has_module_perms</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">app_label</span><span class=\"p\">):</span>\n        <span class=\"s2\">&quot;Does the user have permissions to view the app `app_label`?&quot;</span>\n        <span class=\"c1\"># Simplest possible answer: Yes, always</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">is_staff</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"s2\">&quot;Is the user a member of staff?&quot;</span>\n        <span class=\"c1\"># Simplest possible answer: All admins are staff</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_admin</span>\n</code></pre></div>\n<p>Ansin, chun an tsamhail úsáideora saincheaptha seo a chlárú le riarachán Django, bheadh an cód seo a leanas ag teastáil i gcomhad admin.py an aip:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.admin</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UserAdmin</span> <span class=\"k\">as</span> <span class=\"n\">BaseUserAdmin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ReadOnlyPasswordHashField</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ValidationError</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">customauth.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyUser</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UserCreationForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;A form for creating new users. Includes all the required</span>\n<span class=\"sd\">    fields, plus a repeated password.&quot;&quot;&quot;</span>\n\n    <span class=\"n\">password1</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s2\">&quot;Password&quot;</span><span class=\"p\">,</span> <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">PasswordInput</span><span class=\"p\">)</span>\n    <span class=\"n\">password2</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s2\">&quot;Password confirmation&quot;</span><span class=\"p\">,</span> <span class=\"n\">widget</span><span class=\"o\">=</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">PasswordInput</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">MyUser</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean_password2</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Check that the two password entries match</span>\n        <span class=\"n\">password1</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;password1&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">password2</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;password2&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">password1</span> <span class=\"ow\">and</span> <span class=\"n\">password2</span> <span class=\"ow\">and</span> <span class=\"n\">password1</span> <span class=\"o\">!=</span> <span class=\"n\">password2</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">ValidationError</span><span class=\"p\">(</span><span class=\"s2\">&quot;Passwords don&#39;t match&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">password2</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Save the provided password in hashed format</span>\n        <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">set_password</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;password1&quot;</span><span class=\"p\">])</span>\n        <span class=\"k\">if</span> <span class=\"n\">commit</span><span class=\"p\">:</span>\n            <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">user</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UserChangeForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ModelForm</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;A form for updating users. Includes all the fields on</span>\n<span class=\"sd\">    the user, but replaces the password field with admin&#39;s</span>\n<span class=\"sd\">    disabled password hash display field.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">password</span> <span class=\"o\">=</span> <span class=\"n\">ReadOnlyPasswordHashField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">MyUser</span>\n        <span class=\"n\">fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;is_active&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;is_admin&quot;</span><span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UserAdmin</span><span class=\"p\">(</span><span class=\"n\">BaseUserAdmin</span><span class=\"p\">):</span>\n    <span class=\"c1\"># The forms to add and change user instances</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UserChangeForm</span>\n    <span class=\"n\">add_form</span> <span class=\"o\">=</span> <span class=\"n\">UserCreationForm</span>\n\n    <span class=\"c1\"># The fields to be used in displaying the User model.</span>\n    <span class=\"c1\"># These override the definitions on the base UserAdmin</span>\n    <span class=\"c1\"># that reference specific fields on auth.User.</span>\n    <span class=\"n\">list_display</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;is_admin&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">list_filter</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;is_admin&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">fieldsets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password&quot;</span><span class=\"p\">]}),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;Personal info&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">]}),</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;Permissions&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;is_admin&quot;</span><span class=\"p\">]}),</span>\n    <span class=\"p\">]</span>\n    <span class=\"c1\"># add_fieldsets is not a standard ModelAdmin attribute. UserAdmin</span>\n    <span class=\"c1\"># overrides get_fieldsets to use this attribute when creating a user.</span>\n    <span class=\"n\">add_fieldsets</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span>\n            <span class=\"kc\">None</span><span class=\"p\">,</span>\n            <span class=\"p\">{</span>\n                <span class=\"s2\">&quot;classes&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;wide&quot;</span><span class=\"p\">],</span>\n                <span class=\"s2\">&quot;fields&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;date_of_birth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password1&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password2&quot;</span><span class=\"p\">],</span>\n            <span class=\"p\">},</span>\n        <span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n    <span class=\"n\">search_fields</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;email&quot;</span><span class=\"p\">]</span>\n    <span class=\"n\">filter_horizontal</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n\n\n<span class=\"c1\"># Now register the new UserAdmin...</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">MyUser</span><span class=\"p\">,</span> <span class=\"n\">UserAdmin</span><span class=\"p\">)</span>\n<span class=\"c1\"># ... and, since we&#39;re not using Django&#39;s built-in permissions,</span>\n<span class=\"c1\"># unregister the Group model from admin.</span>\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">unregister</span><span class=\"p\">(</span><span class=\"n\">Group</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Faoi dheireadh, sonraigh an tsamhail saincheaptha mar an tsamhail úsáideora réamhshocraithe do do thionscadal ag baint úsáide as an socrú: setting: AUTH_USER_MODEL i do settings.py`:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">AUTH_USER_MODEL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;customauth.MyUser&quot;</span>\n</code></pre></div>\n<section id=\"adding-an-async-interface\">\n<span id=\"writing-authentication-backends-async-interface\"></span><h4>Adding an async interface<a class=\"heading-anchor\" href=\"#adding-an-async-interface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>To optimize performance when called from an async context authentication,\nbackends can implement async versions of each function - <code class=\"docutils literal notranslate\"><span class=\"pre\">aget_user(user_id)</span></code>\nand <code class=\"docutils literal notranslate\"><span class=\"pre\">aauthenticate(request,</span> <span class=\"pre\">**credentials)</span></code>. When an authentication backend\nextends <code class=\"docutils literal notranslate\"><span class=\"pre\">BaseBackend</span></code> and async versions of these functions are not provided,\nthey will be automatically synthesized with <code class=\"docutils literal notranslate\"><span class=\"pre\">sync_to_async</span></code>. This has\n<a class=\"reference internal\" href=\"/ga/6.0/topics/async/#async-performance\"><span class=\"std std-ref\">performance penalties</span></a>.</p>\n<p>While an async interface is optional, a synchronous interface is always\nrequired. There is no automatic synthesis for a synchronous interface if an\nasync interface is implemented.</p>\n<p>Django's out-of-the-box authentication backends have native async support. If\nthese native backends are extended take special care to make sure the async\nversions of modified functions are modified as well.</p>\n</section>\n</section>\n</section>","rootId":"customizing-authentication-in-django","toc":[{"title":"Foinsí fíordheimhnithe eile","anchor":"other-authentication-sources","children":[{"title":"Cúlpháirtithe fíordheimhnithe","anchor":"specifying-authentication-backends","children":[]},{"title":"Cúlcheann fíordheimhnithe a scríobh","anchor":"writing-an-authentication-backend","children":[]},{"title":"Údarú láimhseála i gcúltaca saincheap","anchor":"handling-authorization-in-custom-backends","children":[{"title":"Údarú d'úsáideoirí gan ainm","anchor":"authorization-for-anonymous-users","children":[]},{"title":"Údarú d'úsáideoirí neamhriach","anchor":"authorization-for-inactive-users","children":[]},{"title":"Ceadanna réad a láimh","anchor":"handling-object-permissions","children":[]}]}]},{"title":"Ceadanna saincheaptha","anchor":"custom-permissions","children":[]},{"title":"An tsamhail ``Úsáideoir ``atá ann cheana a leathnú","anchor":"extending-the-existing-user-model","children":[]},{"title":"Samhail saincheaptha ```Úsáideoir ``a chur in ionad","anchor":"substituting-a-custom-user-model","children":[{"title":"Múnla úsáideora saincheaptha a úsáid agus tionscadal á thosú","anchor":"using-a-custom-user-model-when-starting-a-project","children":[]},{"title":"Athrú go samhail úsáideora saincheaptha lár-thionscadail","anchor":"changing-to-a-custom-user-model-mid-project","children":[]},{"title":"Aipeanna in-athúsáidte agus ``AUTH_USER_MODEL ``","anchor":"reusable-apps-and-auth-user-model","children":[]},{"title":"Ag tagairt don tsamhail ``Úsáideoir ``","anchor":"referencing-the-user-model","children":[]},{"title":"Samhail úsáideora saincheaptha a shonrú","anchor":"specifying-a-custom-user-model","children":[]},{"title":"Bainisteoir a scríobh le haghaidh samhail úsáideora saincheaptha","anchor":"writing-a-manager-for-a-custom-user-model","children":[]},{"title":"Réamhshocraithe ``Úsáideoir ``Django a leathnú","anchor":"extending-django-s-default-user","children":[]},{"title":"Úsáideoirí saincheaptha agus na foirmeacha auth ionsuite","anchor":"custom-users-and-the-built-in-auth-forms","children":[]},{"title":"Úsáideoirí saincheaptha agus:mod: django.contrib.admin","anchor":"custom-users-and-django-contrib-admin","children":[]},{"title":"Úsáideoirí agus ceadanna saincheaptha","anchor":"custom-users-and-permissions","children":[]},{"title":"Úsáideoirí saincheaptha agus samhlacha seachta","anchor":"custom-users-and-proxy-models","children":[]},{"title":"Sampla iomlán","anchor":"a-full-example","children":[{"title":"Adding an async interface","anchor":"adding-an-async-interface","children":[]}]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.0/topics/"},{"docname":"topics/auth/index","title":"Fíordheimhniú úsáideora i Django","url":"/ga/6.0/topics/auth/"}],"prev":{"docname":"topics/auth/passwords","title":"Bainistíocht pasfhocal i Django","url":"/ga/6.0/topics/auth/passwords/"},"next":{"docname":"topics/cache","title":"Creat taisce Django","url":"/ga/6.0/topics/cache/"},"formats":{"html":"/ga/6.0/topics/auth/customizing/","markdown":"/ga/6.0/topics/auth/customizing.md","json":"/ga/6.0/topics/auth/customizing.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/auth/customizing.txt","official":"https://docs.djangoproject.com/ga/6.0/topics/auth/customizing/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}