@strapi/plugin-users-permissions 0.0.0-4fc90398602f
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.
- package/LICENSE +22 -0
- package/README.md +1 -0
- package/admin/src/components/BoundRoute/getMethodColor.js +41 -0
- package/admin/src/components/BoundRoute/index.js +72 -0
- package/admin/src/components/FormModal/Input/index.js +121 -0
- package/admin/src/components/FormModal/index.js +121 -0
- package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.js +30 -0
- package/admin/src/components/Permissions/PermissionRow/SubCategory.js +114 -0
- package/admin/src/components/Permissions/PermissionRow/index.js +53 -0
- package/admin/src/components/Permissions/index.js +56 -0
- package/admin/src/components/Permissions/init.js +9 -0
- package/admin/src/components/Permissions/reducer.js +27 -0
- package/admin/src/components/Policies/index.js +60 -0
- package/admin/src/components/UsersPermissions/index.js +94 -0
- package/admin/src/components/UsersPermissions/init.js +10 -0
- package/admin/src/components/UsersPermissions/reducer.js +60 -0
- package/admin/src/contexts/UsersPermissionsContext/index.js +17 -0
- package/admin/src/hooks/index.js +5 -0
- package/admin/src/hooks/useFetchRole/index.js +64 -0
- package/admin/src/hooks/useFetchRole/reducer.js +31 -0
- package/admin/src/hooks/useForm/index.js +70 -0
- package/admin/src/hooks/useForm/reducer.js +40 -0
- package/admin/src/hooks/usePlugins/index.js +65 -0
- package/admin/src/hooks/usePlugins/init.js +5 -0
- package/admin/src/hooks/usePlugins/reducer.js +34 -0
- package/admin/src/hooks/useRolesList/index.js +63 -0
- package/admin/src/hooks/useRolesList/init.js +5 -0
- package/admin/src/hooks/useRolesList/reducer.js +31 -0
- package/admin/src/index.js +123 -0
- package/admin/src/pages/AdvancedSettings/index.js +238 -0
- package/admin/src/pages/AdvancedSettings/utils/api.js +13 -0
- package/admin/src/pages/AdvancedSettings/utils/layout.js +96 -0
- package/admin/src/pages/AdvancedSettings/utils/schema.js +19 -0
- package/admin/src/pages/EmailTemplates/components/EmailForm.js +173 -0
- package/admin/src/pages/EmailTemplates/components/EmailTable.js +121 -0
- package/admin/src/pages/EmailTemplates/index.js +162 -0
- package/admin/src/pages/EmailTemplates/utils/api.js +13 -0
- package/admin/src/pages/EmailTemplates/utils/schema.js +22 -0
- package/admin/src/pages/Providers/index.js +274 -0
- package/admin/src/pages/Providers/reducer.js +54 -0
- package/admin/src/pages/Providers/utils/api.js +21 -0
- package/admin/src/pages/Providers/utils/createProvidersArray.js +21 -0
- package/admin/src/pages/Providers/utils/forms.js +244 -0
- package/admin/src/pages/Roles/CreatePage/index.js +177 -0
- package/admin/src/pages/Roles/CreatePage/utils/schema.js +9 -0
- package/admin/src/pages/Roles/EditPage/index.js +190 -0
- package/admin/src/pages/Roles/EditPage/utils/schema.js +9 -0
- package/admin/src/pages/Roles/ListPage/components/TableBody.js +96 -0
- package/admin/src/pages/Roles/ListPage/index.js +216 -0
- package/admin/src/pages/Roles/ListPage/utils/api.js +28 -0
- package/admin/src/pages/Roles/ProtectedCreatePage/index.js +12 -0
- package/admin/src/pages/Roles/ProtectedEditPage/index.js +12 -0
- package/admin/src/pages/Roles/ProtectedListPage/index.js +15 -0
- package/admin/src/pages/Roles/index.js +27 -0
- package/admin/src/permissions.js +31 -0
- package/admin/src/pluginId.js +5 -0
- package/admin/src/translations/ar.json +40 -0
- package/admin/src/translations/cs.json +46 -0
- package/admin/src/translations/de.json +58 -0
- package/admin/src/translations/dk.json +83 -0
- package/admin/src/translations/en.json +83 -0
- package/admin/src/translations/es.json +83 -0
- package/admin/src/translations/fr.json +46 -0
- package/admin/src/translations/id.json +58 -0
- package/admin/src/translations/it.json +58 -0
- package/admin/src/translations/ja.json +44 -0
- package/admin/src/translations/ko.json +83 -0
- package/admin/src/translations/ms.json +45 -0
- package/admin/src/translations/nl.json +44 -0
- package/admin/src/translations/pl.json +83 -0
- package/admin/src/translations/pt-BR.json +40 -0
- package/admin/src/translations/pt.json +44 -0
- package/admin/src/translations/ru.json +58 -0
- package/admin/src/translations/sk.json +46 -0
- package/admin/src/translations/sv.json +58 -0
- package/admin/src/translations/th.json +56 -0
- package/admin/src/translations/tr.json +44 -0
- package/admin/src/translations/uk.json +45 -0
- package/admin/src/translations/vi.json +46 -0
- package/admin/src/translations/zh-Hans.json +62 -0
- package/admin/src/translations/zh.json +44 -0
- package/admin/src/utils/axiosInstance.js +36 -0
- package/admin/src/utils/cleanPermissions.js +25 -0
- package/admin/src/utils/formatPluginName.js +26 -0
- package/admin/src/utils/formatPolicies.js +8 -0
- package/admin/src/utils/getRequestURL.js +5 -0
- package/admin/src/utils/getTrad.js +5 -0
- package/admin/src/utils/index.js +5 -0
- package/documentation/content-api.yaml +848 -0
- package/jest.config.front.js +10 -0
- package/package.json +60 -0
- package/server/bootstrap/grant-config.js +123 -0
- package/server/bootstrap/index.js +133 -0
- package/server/bootstrap/users-permissions-actions.js +80 -0
- package/server/config.js +23 -0
- package/server/content-types/index.js +11 -0
- package/server/content-types/permission/index.js +34 -0
- package/server/content-types/role/index.js +51 -0
- package/server/content-types/user/index.js +72 -0
- package/server/content-types/user/schema-config.js +15 -0
- package/server/controllers/auth.js +398 -0
- package/server/controllers/content-manager-user.js +175 -0
- package/server/controllers/index.js +17 -0
- package/server/controllers/permissions.js +26 -0
- package/server/controllers/role.js +77 -0
- package/server/controllers/settings.js +85 -0
- package/server/controllers/user.js +198 -0
- package/server/controllers/validation/auth.js +57 -0
- package/server/controllers/validation/email-template.js +50 -0
- package/server/controllers/validation/user.js +26 -0
- package/server/graphql/index.js +44 -0
- package/server/graphql/mutations/auth/change-password.js +38 -0
- package/server/graphql/mutations/auth/email-confirmation.js +39 -0
- package/server/graphql/mutations/auth/forgot-password.js +35 -0
- package/server/graphql/mutations/auth/login.js +35 -0
- package/server/graphql/mutations/auth/register.js +36 -0
- package/server/graphql/mutations/auth/reset-password.js +38 -0
- package/server/graphql/mutations/crud/role/create-role.js +34 -0
- package/server/graphql/mutations/crud/role/delete-role.js +25 -0
- package/server/graphql/mutations/crud/role/update-role.js +35 -0
- package/server/graphql/mutations/crud/user/create-user.js +45 -0
- package/server/graphql/mutations/crud/user/delete-user.js +39 -0
- package/server/graphql/mutations/crud/user/update-user.js +46 -0
- package/server/graphql/mutations/index.js +43 -0
- package/server/graphql/queries/index.js +13 -0
- package/server/graphql/queries/me.js +17 -0
- package/server/graphql/resolvers-configs.js +42 -0
- package/server/graphql/types/create-role-payload.js +11 -0
- package/server/graphql/types/delete-role-payload.js +11 -0
- package/server/graphql/types/index.js +21 -0
- package/server/graphql/types/login-input.js +13 -0
- package/server/graphql/types/login-payload.js +12 -0
- package/server/graphql/types/me-role.js +14 -0
- package/server/graphql/types/me.js +16 -0
- package/server/graphql/types/password-payload.js +11 -0
- package/server/graphql/types/register-input.js +13 -0
- package/server/graphql/types/update-role-payload.js +11 -0
- package/server/graphql/utils.js +27 -0
- package/server/index.js +21 -0
- package/server/middlewares/index.js +7 -0
- package/server/middlewares/rateLimit.js +27 -0
- package/server/register.js +23 -0
- package/server/routes/admin/index.js +10 -0
- package/server/routes/admin/permissions.js +20 -0
- package/server/routes/admin/role.js +79 -0
- package/server/routes/admin/settings.js +95 -0
- package/server/routes/content-api/auth.js +82 -0
- package/server/routes/content-api/index.js +11 -0
- package/server/routes/content-api/permissions.js +9 -0
- package/server/routes/content-api/role.js +29 -0
- package/server/routes/content-api/user.js +60 -0
- package/server/routes/index.js +6 -0
- package/server/services/index.js +17 -0
- package/server/services/jwt.js +55 -0
- package/server/services/providers-registry.js +292 -0
- package/server/services/providers.js +115 -0
- package/server/services/role.js +177 -0
- package/server/services/user.js +140 -0
- package/server/services/users-permissions.js +236 -0
- package/server/strategies/users-permissions.js +102 -0
- package/server/utils/index.d.ts +16 -0
- package/server/utils/index.js +12 -0
- package/server/utils/sanitize/index.js +9 -0
- package/server/utils/sanitize/sanitizers.js +19 -0
- package/server/utils/sanitize/visitors/index.js +5 -0
- package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +11 -0
- package/strapi-admin.js +3 -0
- package/strapi-server.js +3 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"BoundRoute.title": "绑定路由到",
|
|
3
|
+
"EditForm.inputSelect.description.role": "新验证身份的用户将被赋予所选角色。",
|
|
4
|
+
"EditForm.inputSelect.label.role": "认证用户的默认角色",
|
|
5
|
+
"EditForm.inputToggle.description.email": "不允许用户使用不同的认证提供者(绑定的相同的电子邮件地址)来创建多个帐户。",
|
|
6
|
+
"EditForm.inputToggle.description.email-confirmation": "启用(ON)后,新注册的用户会收到一封确认电子邮件。",
|
|
7
|
+
"EditForm.inputToggle.description.email-confirmation-redirection": "确认您的电子邮件后,选择将您重定向到的位置。",
|
|
8
|
+
"EditForm.inputToggle.description.email-reset-password": "应用程序的重置密码页面的 URL",
|
|
9
|
+
"EditForm.inputToggle.description.sign-up": "当禁用(OFF)时,注册过程将被禁止。任何人无论使用任何的供应商都不可以订阅。",
|
|
10
|
+
"EditForm.inputToggle.label.email": "每个电子邮件地址一个帐户",
|
|
11
|
+
"EditForm.inputToggle.label.email-confirmation": "启用电子邮件确认",
|
|
12
|
+
"EditForm.inputToggle.label.email-confirmation-redirection": "重定向 URL",
|
|
13
|
+
"EditForm.inputToggle.label.email-reset-password": "重置密码页面 URL",
|
|
14
|
+
"EditForm.inputToggle.label.sign-up": "启用注册",
|
|
15
|
+
"EditForm.inputToggle.placeholder.email-confirmation-redirection": "例如: https://yourfrontend.com/reset-password",
|
|
16
|
+
"EditForm.inputToggle.placeholder.email-reset-password": "例如: https://yourfrontend.com/reset-password",
|
|
17
|
+
"EditPage.form.roles": "角色详情",
|
|
18
|
+
"Email.template.email_confirmation": "邮箱地址确认",
|
|
19
|
+
"HeaderNav.link.advancedSettings": "高级设置",
|
|
20
|
+
"HeaderNav.link.emailTemplates": "电子邮件模板",
|
|
21
|
+
"HeaderNav.link.providers": "提供者",
|
|
22
|
+
"Plugin.permissions.plugins.description": "定义 {name} 插件所有允许的操作。",
|
|
23
|
+
"Plugins.header.description": "下面只列出路由绑定的操作。",
|
|
24
|
+
"Plugins.header.title": "权限",
|
|
25
|
+
"Policies.header.hint": "选择应用程序或插件的操作,然后点击 COG 图标显示绑定的路由",
|
|
26
|
+
"Policies.header.title": "高级设置",
|
|
27
|
+
"PopUpForm.Email.email_templates.inputDescription": "如果你不确定如何使用变量, {link}",
|
|
28
|
+
"PopUpForm.Email.link.documentation": "查看我们的文档",
|
|
29
|
+
"PopUpForm.Email.options.from.email.label": "发件人地址",
|
|
30
|
+
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
|
|
31
|
+
"PopUpForm.Email.options.from.name.label": "发件人名称",
|
|
32
|
+
"PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
|
|
33
|
+
"PopUpForm.Email.options.message.label": "消息",
|
|
34
|
+
"PopUpForm.Email.options.object.label": "主题",
|
|
35
|
+
"PopUpForm.Email.options.object.placeholder": "请为%APP_NAME%确认邮箱地址",
|
|
36
|
+
"PopUpForm.Email.options.response_email.label": "回复邮件",
|
|
37
|
+
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
|
|
38
|
+
"PopUpForm.Providers.enabled.description": "如果禁用,用户将无法使用此供应商。",
|
|
39
|
+
"PopUpForm.Providers.enabled.label": "启用",
|
|
40
|
+
"PopUpForm.Providers.key.label": "客户端 ID",
|
|
41
|
+
"PopUpForm.Providers.key.placeholder": "文本",
|
|
42
|
+
"PopUpForm.Providers.redirectURL.front-end.label": "重定向 URL",
|
|
43
|
+
"PopUpForm.Providers.redirectURL.label": "添加到{provider}应用配置的跳转URL",
|
|
44
|
+
"PopUpForm.Providers.secret.label": "客户端秘钥",
|
|
45
|
+
"PopUpForm.Providers.secret.placeholder": "文本",
|
|
46
|
+
"PopUpForm.Providers.subdomain.label": "Host URI (Subdomain)",
|
|
47
|
+
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
|
|
48
|
+
"PopUpForm.header.edit.email-templates": "编辑电子邮件模版",
|
|
49
|
+
"PopUpForm.header.edit.providers": "编辑提供商",
|
|
50
|
+
"Settings.roles.deleted": "角色已被删除",
|
|
51
|
+
"Settings.roles.edited": "角色编辑完成",
|
|
52
|
+
"Settings.section-label": "用户及权限插件",
|
|
53
|
+
"notification.success.submit": "设置已被更新",
|
|
54
|
+
"page.title": "设置 - 角色",
|
|
55
|
+
"plugin.description.long": "使用基于 JWT 的完整身份验证过程来保护 API。这个插件还有一个 ACL 策略,允许你管理用户组之间的权限。",
|
|
56
|
+
"plugin.description.short": "使用基于 JWT 的完整身份验证过程保护 API",
|
|
57
|
+
"plugin.name": "角色及权限",
|
|
58
|
+
"popUpWarning.button.cancel": "取消",
|
|
59
|
+
"popUpWarning.button.confirm": "确认",
|
|
60
|
+
"popUpWarning.title": "请确认",
|
|
61
|
+
"popUpWarning.warning.cancel": "你确定你要取消你的修改?"
|
|
62
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"BoundRoute.title": "綁定路徑到",
|
|
3
|
+
"EditForm.inputSelect.description.role": "將新的驗證使用者加入此身份。",
|
|
4
|
+
"EditForm.inputSelect.label.role": "驗證使用者預設身份",
|
|
5
|
+
"EditForm.inputToggle.description.email": "禁止使用者使用同一個電子郵件地址 + 不同的驗證方式註冊多個帳號",
|
|
6
|
+
"EditForm.inputToggle.description.email-confirmation": "當啟用後,新註冊的使用者將會收到一封認證郵件。",
|
|
7
|
+
"EditForm.inputToggle.description.email-confirmation-redirection": "認證完後後,使用者被重新導向的網址。",
|
|
8
|
+
"EditForm.inputToggle.description.sign-up": "當停用後,不論使用任何驗證方式使用者將無法註冊。",
|
|
9
|
+
"EditForm.inputToggle.label.email": "電子郵件地址單一帳號限制",
|
|
10
|
+
"EditForm.inputToggle.label.email-confirmation": "啟用電子郵件地址驗證",
|
|
11
|
+
"EditForm.inputToggle.label.email-confirmation-redirection": "重新導向網址",
|
|
12
|
+
"EditForm.inputToggle.label.sign-up": "啟用註冊",
|
|
13
|
+
"HeaderNav.link.advancedSettings": "進階設定",
|
|
14
|
+
"HeaderNav.link.emailTemplates": "郵件範本",
|
|
15
|
+
"HeaderNav.link.providers": "驗證方式",
|
|
16
|
+
"Plugin.permissions.plugins.description": "為 {name} 擴充功能定義所有可用的操作",
|
|
17
|
+
"Plugins.header.description": "只有綁定路徑的操作會顯示在下方",
|
|
18
|
+
"Plugins.header.title": "權限",
|
|
19
|
+
"Policies.header.hint": "選取應用程式或擴充功能的操作然後點擊齒輪圖示以顯示綁定路徑",
|
|
20
|
+
"Policies.header.title": "進階設定",
|
|
21
|
+
"PopUpForm.Email.email_templates.inputDescription": "如果您不確定要怎麼使用變數,請 {link}",
|
|
22
|
+
"PopUpForm.Email.options.from.email.label": "寄件人地址",
|
|
23
|
+
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
|
|
24
|
+
"PopUpForm.Email.options.from.name.label": "寄件人名稱",
|
|
25
|
+
"PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
|
|
26
|
+
"PopUpForm.Email.options.message.label": "訊息",
|
|
27
|
+
"PopUpForm.Email.options.object.label": "主旨",
|
|
28
|
+
"PopUpForm.Email.options.response_email.label": "回覆地址",
|
|
29
|
+
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
|
|
30
|
+
"PopUpForm.Providers.enabled.description": "如果停用,使用者將無法使用這個驗證方式",
|
|
31
|
+
"PopUpForm.Providers.enabled.label": "啟用",
|
|
32
|
+
"PopUpForm.Providers.key.label": "客戶端 ID",
|
|
33
|
+
"PopUpForm.Providers.key.placeholder": "TEXT",
|
|
34
|
+
"PopUpForm.Providers.redirectURL.front-end.label": "您應用程式的前端頁面網址",
|
|
35
|
+
"PopUpForm.Providers.secret.label": "客戶端密鑰",
|
|
36
|
+
"PopUpForm.Providers.secret.placeholder": "TEXT",
|
|
37
|
+
"PopUpForm.Providers.subdomain.label": "Host URI (Subdomain)",
|
|
38
|
+
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
|
|
39
|
+
"PopUpForm.header.edit.email-templates": "編輯郵件範本",
|
|
40
|
+
"notification.success.submit": "設定已更新",
|
|
41
|
+
"plugin.description.long": "使用 JWT 認證保護您的 API。這個擴充功能也使用 ACL 來讓你管理不同群組使用者的權限。",
|
|
42
|
+
"plugin.description.short": "使用 JWT 認證保護您的 API",
|
|
43
|
+
"plugin.name": "身份與權限"
|
|
44
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { auth } from '@strapi/helper-plugin';
|
|
3
|
+
|
|
4
|
+
const instance = axios.create({
|
|
5
|
+
baseURL: process.env.STRAPI_ADMIN_BACKEND_URL,
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
instance.interceptors.request.use(
|
|
9
|
+
async (config) => {
|
|
10
|
+
config.headers = {
|
|
11
|
+
Authorization: `Bearer ${auth.getToken()}`,
|
|
12
|
+
Accept: 'application/json',
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
return config;
|
|
17
|
+
},
|
|
18
|
+
(error) => {
|
|
19
|
+
Promise.reject(error);
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
instance.interceptors.response.use(
|
|
24
|
+
(response) => response,
|
|
25
|
+
(error) => {
|
|
26
|
+
// whatever you want to do with the error
|
|
27
|
+
if (error.response?.status === 401) {
|
|
28
|
+
auth.clearAppStorage();
|
|
29
|
+
window.location.reload();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
export default instance;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isEmpty } from 'lodash';
|
|
2
|
+
|
|
3
|
+
const cleanPermissions = (permissions) =>
|
|
4
|
+
Object.keys(permissions).reduce((acc, current) => {
|
|
5
|
+
const currentPermission = permissions[current].controllers;
|
|
6
|
+
const cleanedControllers = Object.keys(currentPermission).reduce((acc2, curr) => {
|
|
7
|
+
if (isEmpty(currentPermission[curr])) {
|
|
8
|
+
return acc2;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
acc2[curr] = currentPermission[curr];
|
|
12
|
+
|
|
13
|
+
return acc2;
|
|
14
|
+
}, {});
|
|
15
|
+
|
|
16
|
+
if (isEmpty(cleanedControllers)) {
|
|
17
|
+
return acc;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
acc[current] = { controllers: cleanedControllers };
|
|
21
|
+
|
|
22
|
+
return acc;
|
|
23
|
+
}, {});
|
|
24
|
+
|
|
25
|
+
export default cleanPermissions;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import upperFirst from 'lodash/upperFirst';
|
|
2
|
+
|
|
3
|
+
function formatPluginName(pluginSlug) {
|
|
4
|
+
switch (pluginSlug) {
|
|
5
|
+
case 'application':
|
|
6
|
+
return 'Application';
|
|
7
|
+
case 'plugin::content-manager':
|
|
8
|
+
return 'Content manager';
|
|
9
|
+
case 'plugin::content-type-builder':
|
|
10
|
+
return 'Content types builder';
|
|
11
|
+
case 'plugin::documentation':
|
|
12
|
+
return 'Documentation';
|
|
13
|
+
case 'plugin::email':
|
|
14
|
+
return 'Email';
|
|
15
|
+
case 'plugin::i18n':
|
|
16
|
+
return 'i18n';
|
|
17
|
+
case 'plugin::upload':
|
|
18
|
+
return 'Upload';
|
|
19
|
+
case 'plugin::users-permissions':
|
|
20
|
+
return 'Users-permissions';
|
|
21
|
+
default:
|
|
22
|
+
return upperFirst(pluginSlug.replace('api::', '').replace('plugin::', ''));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export default formatPluginName;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as axiosInstance } from './axiosInstance';
|
|
2
|
+
export { default as cleanPermissions } from './cleanPermissions';
|
|
3
|
+
export { default as getRequestURL } from './getRequestURL';
|
|
4
|
+
export { default as getTrad } from './getTrad';
|
|
5
|
+
export { default as formatPolicies } from './formatPolicies';
|