bazis-permit 2.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bazis/contrib/permit/__init__.py +35 -0
- bazis/contrib/permit/_version.py +34 -0
- bazis/contrib/permit/admin.py +33 -0
- bazis/contrib/permit/admin_abstract.py +198 -0
- bazis/contrib/permit/apps.py +40 -0
- bazis/contrib/permit/conf.py +33 -0
- bazis/contrib/permit/locale/en/LC_MESSAGES/django.mo +0 -0
- bazis/contrib/permit/locale/en/LC_MESSAGES/django.po +93 -0
- bazis/contrib/permit/locale/messages.pot +97 -0
- bazis/contrib/permit/locale/ru/LC_MESSAGES/django.mo +0 -0
- bazis/contrib/permit/locale/ru/LC_MESSAGES/django.po +93 -0
- bazis/contrib/permit/migrations/0001_initial.py +81 -0
- bazis/contrib/permit/migrations/0002_alter_grouppermission_permissions.py +32 -0
- bazis/contrib/permit/migrations/0003_alter_grouppermission_slug_alter_permission_slug_and_more.py +42 -0
- bazis/contrib/permit/migrations/0004_alter_grouppermission_slug_alter_permission_slug_and_more.py +42 -0
- bazis/contrib/permit/migrations/0005_alter_grouppermission_slug_alter_permission_slug_and_more.py +42 -0
- bazis/contrib/permit/migrations/0006_remove_grouppermission_name_remove_role_name_and_more.py +47 -0
- bazis/contrib/permit/migrations/__init__.py +14 -0
- bazis/contrib/permit/models.py +31 -0
- bazis/contrib/permit/models_abstract.py +431 -0
- bazis/contrib/permit/router.py +23 -0
- bazis/contrib/permit/routes.py +28 -0
- bazis/contrib/permit/routes_abstract.py +625 -0
- bazis/contrib/permit/schemas.py +172 -0
- bazis/contrib/permit/services.py +265 -0
- bazis/contrib/permit/signals.py +54 -0
- bazis/contrib/permit/utils.py +97 -0
- bazis_permit-2.2.0.dist-info/METADATA +801 -0
- bazis_permit-2.2.0.dist-info/RECORD +31 -0
- bazis_permit-2.2.0.dist-info/WHEEL +5 -0
- bazis_permit-2.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Copyright 2026 EcoFuture Technology Services LLC and contributors
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
17
|
+
__version__ = version('bazis-permit')
|
|
18
|
+
except PackageNotFoundError:
|
|
19
|
+
__version__ = 'dev'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
"""
|
|
23
|
+
TODO: there is a problem now:
|
|
24
|
+
if the add action is available for an object, it can be added with a reference to
|
|
25
|
+
an external object that the user does not have access to.
|
|
26
|
+
this happens because the object does not have filled selectors at the addition stage.
|
|
27
|
+
|
|
28
|
+
we need a solution that will allow checking the availability of related objects
|
|
29
|
+
at the stage of adding or editing the main object.
|
|
30
|
+
|
|
31
|
+
that is, we need a solution that will make such a permission work:
|
|
32
|
+
'entity.extended_entity.item.add.author_parent', # only those who are the author of the
|
|
33
|
+
parent record can add entries
|
|
34
|
+
|
|
35
|
+
"""
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
|
+
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
TYPE_CHECKING = False
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from typing import Tuple
|
|
16
|
+
from typing import Union
|
|
17
|
+
|
|
18
|
+
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
20
|
+
else:
|
|
21
|
+
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
23
|
+
|
|
24
|
+
version: str
|
|
25
|
+
__version__: str
|
|
26
|
+
__version_tuple__: VERSION_TUPLE
|
|
27
|
+
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
30
|
+
|
|
31
|
+
__version__ = version = '2.2.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 2, 0)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = None
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2026 EcoFuture Technology Services LLC and contributors
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from django.contrib import admin
|
|
16
|
+
|
|
17
|
+
from . import models
|
|
18
|
+
from .admin_abstract import GroupPermissionAdminBase, PermissionAdminBase, RoleAdminBase
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@admin.register(models.Role)
|
|
22
|
+
class RoleAdmin(RoleAdminBase):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@admin.register(models.GroupPermission)
|
|
27
|
+
class GroupPermissionAdmin(GroupPermissionAdminBase):
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@admin.register(models.Permission)
|
|
32
|
+
class PermissionAdmin(PermissionAdminBase):
|
|
33
|
+
pass
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Copyright 2026 EcoFuture Technology Services LLC and contributors
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import re
|
|
16
|
+
|
|
17
|
+
from django import forms
|
|
18
|
+
from django.contrib import admin
|
|
19
|
+
from django.contrib.admin.views.autocomplete import AutocompleteJsonView
|
|
20
|
+
from django.contrib.admin.widgets import AutocompleteMixin as AutocompleteMixinDjango
|
|
21
|
+
from django.urls import re_path, reverse
|
|
22
|
+
from django.utils.html import mark_safe
|
|
23
|
+
from django.utils.text import capfirst
|
|
24
|
+
from django.utils.translation import gettext_lazy as _
|
|
25
|
+
|
|
26
|
+
from translated_fields import TranslatedFieldAdmin
|
|
27
|
+
|
|
28
|
+
from bazis.contrib.permit.schemas import PATTERN_SELECTORS
|
|
29
|
+
from bazis.contrib.users import get_user_model
|
|
30
|
+
from bazis.core.admin_abstract import AutocompleteMixin, DtAdminMixin, M2mThroughMixin
|
|
31
|
+
from bazis.core.utils.sets_order import OrderedSet
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
User = get_user_model()
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class UserPermitAdminMixin:
|
|
38
|
+
"""
|
|
39
|
+
A mixin class for customizing the Django admin interface for user permits,
|
|
40
|
+
adding additional fields and display options related to user roles.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def get_fields_permissions(self, request, obj=None):
|
|
44
|
+
"""
|
|
45
|
+
Extends the parent method to include 'roles' and 'role_current' in the fields
|
|
46
|
+
permissions for the admin interface.
|
|
47
|
+
"""
|
|
48
|
+
return super().get_fields_permissions(request, obj) + ('roles', 'role_current')
|
|
49
|
+
|
|
50
|
+
def get_list_display(self, request):
|
|
51
|
+
"""
|
|
52
|
+
Extends the parent method to include 'get_roles_name' and 'role_current' in the
|
|
53
|
+
list display for the admin interface, ensuring unique display fields using
|
|
54
|
+
OrderedSet.
|
|
55
|
+
"""
|
|
56
|
+
return tuple(
|
|
57
|
+
OrderedSet(
|
|
58
|
+
('id',) + super().get_list_display(request) + ('get_roles_name', 'role_current')
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
@admin.display(description=_('Roles'))
|
|
63
|
+
def get_roles_name(self, user):
|
|
64
|
+
"""
|
|
65
|
+
Returns a safe HTML string that displays the names of all roles associated with
|
|
66
|
+
a user, separated by line breaks. This method is used in the admin interface to
|
|
67
|
+
show user roles.
|
|
68
|
+
"""
|
|
69
|
+
return mark_safe('<br/>'.join([role.name for role in user.roles.all()]))
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class RoleAdminBase(M2mThroughMixin, DtAdminMixin, TranslatedFieldAdmin, admin.ModelAdmin):
|
|
73
|
+
"""
|
|
74
|
+
Admin configuration for the Role model, including list display, editable fields,
|
|
75
|
+
and horizontal filters.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
list_display = (
|
|
79
|
+
'__str__',
|
|
80
|
+
'slug',
|
|
81
|
+
'is_system',
|
|
82
|
+
)
|
|
83
|
+
list_editable = ('is_system',)
|
|
84
|
+
filter_horizontal = ('groups_permission',)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class GroupPermissionAdminBase(DtAdminMixin, TranslatedFieldAdmin, admin.ModelAdmin):
|
|
88
|
+
"""
|
|
89
|
+
Admin configuration for the GroupPermission model, including list display,
|
|
90
|
+
editable fields, and horizontal filters.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
filter_horizontal = ('permissions',)
|
|
94
|
+
list_display = (
|
|
95
|
+
'pk',
|
|
96
|
+
'name',
|
|
97
|
+
'slug',
|
|
98
|
+
)
|
|
99
|
+
list_editable = (
|
|
100
|
+
'slug',
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class PermissionAdminBase(DtAdminMixin, TranslatedFieldAdmin, admin.ModelAdmin):
|
|
105
|
+
"""
|
|
106
|
+
Admin configuration for the Permission model, including list display, editable
|
|
107
|
+
fields, and search fields.
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
list_display = (
|
|
111
|
+
'__str__',
|
|
112
|
+
'slug',
|
|
113
|
+
)
|
|
114
|
+
search_fields = ('slug',)
|
|
115
|
+
list_editable = ('slug',)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class PermitAutocompleteJsonView(AutocompleteJsonView):
|
|
119
|
+
def process_request(self, request):
|
|
120
|
+
if match := re.match(PATTERN_SELECTORS, request.GET['field_name']):
|
|
121
|
+
target_field = match.group(1)
|
|
122
|
+
request_GET = request.GET.copy() # noqa: N806
|
|
123
|
+
request_GET['field_name'] = target_field
|
|
124
|
+
request.GET = request_GET
|
|
125
|
+
return super().process_request(request)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class PermitAutocompleteSelectMultiple(AutocompleteMixinDjango, forms.SelectMultiple):
|
|
129
|
+
def __init__(self, origin_field, ref_field, admin_site, using, url_autocomplete, **kwargs):
|
|
130
|
+
self.url_autocomplete = url_autocomplete
|
|
131
|
+
self.origin_field = origin_field
|
|
132
|
+
super().__init__(ref_field, admin_site, using=using, **kwargs)
|
|
133
|
+
|
|
134
|
+
def build_attrs(self, base_attrs, extra_attrs=None):
|
|
135
|
+
attrs = super().build_attrs(base_attrs, extra_attrs=extra_attrs)
|
|
136
|
+
attrs['data-field-name'] = self.origin_field.name
|
|
137
|
+
return attrs
|
|
138
|
+
|
|
139
|
+
def get_url(self):
|
|
140
|
+
return reverse(f'{self.admin_site.name}:{self.url_autocomplete}')
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class PermitAutocompleteMultipleChoiceField(forms.ModelMultipleChoiceField):
|
|
144
|
+
def prepare_value(self, value):
|
|
145
|
+
if isinstance(value, list):
|
|
146
|
+
return value
|
|
147
|
+
return super().prepare_value(value)
|
|
148
|
+
|
|
149
|
+
def clean(self, value):
|
|
150
|
+
if value:
|
|
151
|
+
return [str(user.pk) for user in super().clean(value)]
|
|
152
|
+
return []
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class PermitAutocompleteMixin(AutocompleteMixin):
|
|
156
|
+
"""
|
|
157
|
+
Admin configuration for the ParentEntity model, including display, filter,
|
|
158
|
+
search options, and related inlines.
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
class Media:
|
|
162
|
+
js = ('admin/js/autocomplete.js',)
|
|
163
|
+
|
|
164
|
+
def formfield_for_dbfield(self, db_field, **kwargs):
|
|
165
|
+
if match := re.match(PATTERN_SELECTORS, db_field.name):
|
|
166
|
+
target_field_name = match.group(1)
|
|
167
|
+
origin_field = db_field
|
|
168
|
+
db_field = self.model.get_fields_info().relations.get(target_field_name).model_field
|
|
169
|
+
|
|
170
|
+
kwargs['widget'] = PermitAutocompleteSelectMultiple(
|
|
171
|
+
origin_field,
|
|
172
|
+
db_field,
|
|
173
|
+
self.admin_site,
|
|
174
|
+
using=kwargs.get("using"),
|
|
175
|
+
url_autocomplete=self.get_url_autocomplete()
|
|
176
|
+
)
|
|
177
|
+
kwargs['label'] = capfirst(origin_field.verbose_name.strip())
|
|
178
|
+
kwargs['form_class'] = PermitAutocompleteMultipleChoiceField
|
|
179
|
+
|
|
180
|
+
formfield = super().formfield_for_dbfield(db_field, **kwargs)
|
|
181
|
+
|
|
182
|
+
return formfield
|
|
183
|
+
|
|
184
|
+
def get_url_autocomplete(self):
|
|
185
|
+
return f'{self.opts.app_label}_{self.opts.model_name}_changelist-autocomplete'
|
|
186
|
+
|
|
187
|
+
def get_urls(self):
|
|
188
|
+
urls = super().get_urls()
|
|
189
|
+
|
|
190
|
+
urls = [
|
|
191
|
+
re_path(
|
|
192
|
+
r'^autocomplete/$', self.autocomplete_view, name=self.get_url_autocomplete()
|
|
193
|
+
),
|
|
194
|
+
] + urls
|
|
195
|
+
return urls
|
|
196
|
+
|
|
197
|
+
def autocomplete_view(self, request):
|
|
198
|
+
return PermitAutocompleteJsonView.as_view(admin_site=self.admin_site)(request)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright 2026 EcoFuture Technology Services LLC and contributors
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from django.utils.translation import gettext_lazy as _
|
|
16
|
+
|
|
17
|
+
from bazis.core.utils.apps import BaseConfig
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PermitConfig(BaseConfig):
|
|
21
|
+
"""
|
|
22
|
+
Configuration class for the 'permit' application within the Bazis project. It
|
|
23
|
+
sets the application name and provides a human-readable name for the application
|
|
24
|
+
using Django's translation utilities.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
name = 'bazis.contrib.permit'
|
|
28
|
+
verbose_name = _('Permit')
|
|
29
|
+
|
|
30
|
+
def ready(self):
|
|
31
|
+
"""
|
|
32
|
+
Method to perform actions when the application is ready, such as importing
|
|
33
|
+
signals.
|
|
34
|
+
"""
|
|
35
|
+
super().ready()
|
|
36
|
+
|
|
37
|
+
from . import signals # noqa: F401
|
|
38
|
+
from .models_abstract import PermitModelMixin
|
|
39
|
+
|
|
40
|
+
PermitModelMixin.setup_selectors_fields()
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2026 EcoFuture Technology Services LLC and contributors
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from django.utils.translation import gettext_lazy as _
|
|
16
|
+
|
|
17
|
+
from pydantic import Field
|
|
18
|
+
|
|
19
|
+
from bazis.core.utils.schemas import BazisSettings
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Settings(BazisSettings):
|
|
23
|
+
"""
|
|
24
|
+
Represents the settings configuration for the application, extending
|
|
25
|
+
BazisSettings to include a specific permission cache expiry time.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
BAZIS_PERMISSION_CACHE_EXPIRE: int = Field(
|
|
29
|
+
7, title=_('Time to store user permissions, sec'), dynamic=True
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
settings = Settings()
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
msgid ""
|
|
7
|
+
msgstr ""
|
|
8
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
|
10
|
+
"POT-Creation-Date: 2024-07-04 11:08+0000\n"
|
|
11
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
12
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
13
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
14
|
+
"Language: \n"
|
|
15
|
+
"MIME-Version: 1.0\n"
|
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
18
|
+
|
|
19
|
+
#: admin_abstract.py:32 models.py:89
|
|
20
|
+
msgid "Roles"
|
|
21
|
+
msgstr ""
|
|
22
|
+
|
|
23
|
+
#: apps.py:13
|
|
24
|
+
msgid "Permit"
|
|
25
|
+
msgstr ""
|
|
26
|
+
|
|
27
|
+
#: conf.py:13
|
|
28
|
+
msgid "Time to store user permissions, sec"
|
|
29
|
+
msgstr ""
|
|
30
|
+
|
|
31
|
+
#: models.py:28
|
|
32
|
+
msgid "Label"
|
|
33
|
+
msgstr ""
|
|
34
|
+
|
|
35
|
+
#: models.py:57
|
|
36
|
+
msgid "Name"
|
|
37
|
+
msgstr ""
|
|
38
|
+
|
|
39
|
+
#: models.py:78 models.py:104
|
|
40
|
+
msgid "Permission Groups"
|
|
41
|
+
msgstr ""
|
|
42
|
+
|
|
43
|
+
#: models.py:80
|
|
44
|
+
msgid "For Anonymous Users"
|
|
45
|
+
msgstr ""
|
|
46
|
+
|
|
47
|
+
#: models.py:81
|
|
48
|
+
msgid "System Role"
|
|
49
|
+
msgstr ""
|
|
50
|
+
|
|
51
|
+
#: models.py:88
|
|
52
|
+
msgid "Role"
|
|
53
|
+
msgstr ""
|
|
54
|
+
|
|
55
|
+
#: models.py:96 models.py:117
|
|
56
|
+
msgid "Permissions"
|
|
57
|
+
msgstr ""
|
|
58
|
+
|
|
59
|
+
#: models.py:103
|
|
60
|
+
msgid "Permission Group"
|
|
61
|
+
msgstr ""
|
|
62
|
+
|
|
63
|
+
#: models.py:116
|
|
64
|
+
msgid "Permission"
|
|
65
|
+
msgstr ""
|
|
66
|
+
|
|
67
|
+
#: models_abstract.py:128
|
|
68
|
+
msgid "User roles"
|
|
69
|
+
msgstr ""
|
|
70
|
+
|
|
71
|
+
#: models_abstract.py:131
|
|
72
|
+
msgid "Current user role"
|
|
73
|
+
msgstr ""
|
|
74
|
+
|
|
75
|
+
#: router.py:8
|
|
76
|
+
msgid "Role model"
|
|
77
|
+
msgstr ""
|
|
78
|
+
|
|
79
|
+
#: routes_abstract.py:449
|
|
80
|
+
msgid "Available for editing"
|
|
81
|
+
msgstr ""
|
|
82
|
+
|
|
83
|
+
#: routes_abstract.py:460
|
|
84
|
+
msgid "Available for deletion"
|
|
85
|
+
msgstr ""
|
|
86
|
+
|
|
87
|
+
#: routes_abstract.py:471
|
|
88
|
+
msgid "Available for creation"
|
|
89
|
+
msgstr ""
|
|
90
|
+
|
|
91
|
+
#: routes_abstract.py:483
|
|
92
|
+
msgid "Available actions"
|
|
93
|
+
msgstr ""
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
#, fuzzy
|
|
7
|
+
msgid ""
|
|
8
|
+
msgstr ""
|
|
9
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
|
+
"Report-Msgid-Bugs-To: \n"
|
|
11
|
+
"POT-Creation-Date: 2024-06-06 00:19+0200\n"
|
|
12
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
15
|
+
"Language: \n"
|
|
16
|
+
"MIME-Version: 1.0\n"
|
|
17
|
+
"Content-Type: text/plain; charset=CHARSET\n"
|
|
18
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
19
|
+
|
|
20
|
+
#: contrib/permit/routes_abstract.py:353
|
|
21
|
+
msgid "Available for editing"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
#: contrib/permit/routes_abstract.py:363
|
|
25
|
+
msgid "Available for deletion"
|
|
26
|
+
msgstr ""
|
|
27
|
+
|
|
28
|
+
#: contrib/permit/routes_abstract.py:373
|
|
29
|
+
msgid "Available for creation"
|
|
30
|
+
msgstr ""
|
|
31
|
+
|
|
32
|
+
#: contrib/permit/routes_abstract.py:385
|
|
33
|
+
msgid "Available actions"
|
|
34
|
+
msgstr ""
|
|
35
|
+
|
|
36
|
+
#: contrib/permit/models_abstract.py:96
|
|
37
|
+
msgid "User roles"
|
|
38
|
+
msgstr ""
|
|
39
|
+
|
|
40
|
+
#: contrib/permit/models_abstract.py:99
|
|
41
|
+
msgid "Current user role"
|
|
42
|
+
msgstr ""
|
|
43
|
+
|
|
44
|
+
#: contrib/permit/models.py:17
|
|
45
|
+
msgid "Label"
|
|
46
|
+
msgstr ""
|
|
47
|
+
|
|
48
|
+
#: contrib/permit/models.py:32
|
|
49
|
+
msgid "Name"
|
|
50
|
+
msgstr ""
|
|
51
|
+
|
|
52
|
+
#: contrib/permit/models.py:42
|
|
53
|
+
#: contrib/permit/models.py:56
|
|
54
|
+
msgid "Permission Groups"
|
|
55
|
+
msgstr ""
|
|
56
|
+
|
|
57
|
+
#: contrib/permit/models.py:43
|
|
58
|
+
msgid "For Anonymous Users"
|
|
59
|
+
msgstr ""
|
|
60
|
+
|
|
61
|
+
#: contrib/permit/models.py:44
|
|
62
|
+
msgid "System Role"
|
|
63
|
+
msgstr ""
|
|
64
|
+
|
|
65
|
+
#: contrib/permit/models.py:47
|
|
66
|
+
msgid "Role"
|
|
67
|
+
msgstr ""
|
|
68
|
+
|
|
69
|
+
#: contrib/permit/models.py:48
|
|
70
|
+
#: contrib/permit/admin_abstract.py:19
|
|
71
|
+
msgid "Roles"
|
|
72
|
+
msgstr ""
|
|
73
|
+
|
|
74
|
+
#: contrib/permit/models.py:52
|
|
75
|
+
#: contrib/permit/models.py:62
|
|
76
|
+
msgid "Permissions"
|
|
77
|
+
msgstr ""
|
|
78
|
+
|
|
79
|
+
#: contrib/permit/models.py:55
|
|
80
|
+
msgid "Permission Group"
|
|
81
|
+
msgstr ""
|
|
82
|
+
|
|
83
|
+
#: contrib/permit/models.py:61
|
|
84
|
+
msgid "Permission"
|
|
85
|
+
msgstr ""
|
|
86
|
+
|
|
87
|
+
#: contrib/permit/conf.py:8
|
|
88
|
+
msgid "Time to store user permissions, sec"
|
|
89
|
+
msgstr ""
|
|
90
|
+
|
|
91
|
+
#: contrib/permit/apps.py:7
|
|
92
|
+
msgid "Permit"
|
|
93
|
+
msgstr ""
|
|
94
|
+
|
|
95
|
+
#: contrib/permit/router.py:8
|
|
96
|
+
msgid "Role model"
|
|
97
|
+
msgstr ""
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
msgid ""
|
|
7
|
+
msgstr ""
|
|
8
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
|
10
|
+
"POT-Creation-Date: 2024-07-04 11:08+0000\n"
|
|
11
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
12
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
13
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
14
|
+
"Language: \n"
|
|
15
|
+
"MIME-Version: 1.0\n"
|
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
18
|
+
|
|
19
|
+
#: admin_abstract.py:32 models.py:89
|
|
20
|
+
msgid "Roles"
|
|
21
|
+
msgstr "Роли"
|
|
22
|
+
|
|
23
|
+
#: apps.py:13
|
|
24
|
+
msgid "Permit"
|
|
25
|
+
msgstr "Разрешение"
|
|
26
|
+
|
|
27
|
+
#: conf.py:13
|
|
28
|
+
msgid "Time to store user permissions, sec"
|
|
29
|
+
msgstr "Время хранения разрешений пользователя, сек"
|
|
30
|
+
|
|
31
|
+
#: models.py:28
|
|
32
|
+
msgid "Label"
|
|
33
|
+
msgstr "Метка"
|
|
34
|
+
|
|
35
|
+
#: models.py:57
|
|
36
|
+
msgid "Name"
|
|
37
|
+
msgstr "Название"
|
|
38
|
+
|
|
39
|
+
#: models.py:78 models.py:104
|
|
40
|
+
msgid "Permission Groups"
|
|
41
|
+
msgstr "Группы разрешений"
|
|
42
|
+
|
|
43
|
+
#: models.py:80
|
|
44
|
+
msgid "For Anonymous Users"
|
|
45
|
+
msgstr "Для анонимных юзеров"
|
|
46
|
+
|
|
47
|
+
#: models.py:81
|
|
48
|
+
msgid "System Role"
|
|
49
|
+
msgstr "Системная роль"
|
|
50
|
+
|
|
51
|
+
#: models.py:88
|
|
52
|
+
msgid "Role"
|
|
53
|
+
msgstr "Роль"
|
|
54
|
+
|
|
55
|
+
#: models.py:96 models.py:117
|
|
56
|
+
msgid "Permissions"
|
|
57
|
+
msgstr "Разрешения"
|
|
58
|
+
|
|
59
|
+
#: models.py:103
|
|
60
|
+
msgid "Permission Group"
|
|
61
|
+
msgstr "Группа разрешений"
|
|
62
|
+
|
|
63
|
+
#: models.py:116
|
|
64
|
+
msgid "Permission"
|
|
65
|
+
msgstr "Разрешение"
|
|
66
|
+
|
|
67
|
+
#: models_abstract.py:128
|
|
68
|
+
msgid "User roles"
|
|
69
|
+
msgstr "Роли пользователя"
|
|
70
|
+
|
|
71
|
+
#: models_abstract.py:131
|
|
72
|
+
msgid "Current user role"
|
|
73
|
+
msgstr "Текущая роль пользователя"
|
|
74
|
+
|
|
75
|
+
#: router.py:8
|
|
76
|
+
msgid "Role model"
|
|
77
|
+
msgstr "Ролевая модель"
|
|
78
|
+
|
|
79
|
+
#: routes_abstract.py:449
|
|
80
|
+
msgid "Available for editing"
|
|
81
|
+
msgstr "Доступны для редактирования"
|
|
82
|
+
|
|
83
|
+
#: routes_abstract.py:460
|
|
84
|
+
msgid "Available for deletion"
|
|
85
|
+
msgstr "Доступны для удаления"
|
|
86
|
+
|
|
87
|
+
#: routes_abstract.py:471
|
|
88
|
+
msgid "Available for creation"
|
|
89
|
+
msgstr "Доступно для создания"
|
|
90
|
+
|
|
91
|
+
#: routes_abstract.py:483
|
|
92
|
+
msgid "Available actions"
|
|
93
|
+
msgstr "Доступные действия"
|