permission_forge 0.14.1 → 0.15.0

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.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2372 -0
  3. data/README.md +76 -25
  4. data/app/controllers/concerns/permission_forge/api/crud_actions.rb +3 -2
  5. data/app/controllers/concerns/permission_forge/api/input_shapes.rb +200 -0
  6. data/app/controllers/concerns/permission_forge/api/pagination.rb +12 -5
  7. data/app/controllers/concerns/permission_forge/api/response_renderer.rb +37 -1
  8. data/app/controllers/concerns/permission_forge/api_authentication.rb +13 -2
  9. data/app/controllers/concerns/permission_forge/cache_confirmation.rb +42 -11
  10. data/app/controllers/concerns/permission_forge/change_review.rb +42 -0
  11. data/app/controllers/concerns/permission_forge/copy_refusal.rb +39 -0
  12. data/app/controllers/concerns/permission_forge/param_shapes.rb +207 -7
  13. data/app/controllers/concerns/permission_forge/save_notice.rb +69 -0
  14. data/app/controllers/permission_forge/api/audit_events_controller.rb +1 -1
  15. data/app/controllers/permission_forge/api/base_controller.rb +163 -12
  16. data/app/controllers/permission_forge/api/dashboard_controller.rb +29 -4
  17. data/app/controllers/permission_forge/api/permission_set_group_users_controller.rb +5 -2
  18. data/app/controllers/permission_forge/api/permission_set_groups_controller.rb +5 -4
  19. data/app/controllers/permission_forge/api/permission_set_rules_controller.rb +7 -5
  20. data/app/controllers/permission_forge/api/permission_set_users_controller.rb +80 -19
  21. data/app/controllers/permission_forge/api/permission_sets_controller.rb +12 -6
  22. data/app/controllers/permission_forge/api/resource_actions_controller.rb +1 -1
  23. data/app/controllers/permission_forge/api/resource_fields_controller.rb +3 -4
  24. data/app/controllers/permission_forge/api/resources_controller.rb +26 -12
  25. data/app/controllers/permission_forge/api/unmatched_routes_controller.rb +20 -0
  26. data/app/controllers/permission_forge/application_controller.rb +39 -5
  27. data/app/controllers/permission_forge/assignments_controller.rb +36 -34
  28. data/app/controllers/permission_forge/bulk_assignments_controller.rb +8 -4
  29. data/app/controllers/permission_forge/field_lookups_controller.rb +1 -1
  30. data/app/controllers/permission_forge/maintenance_controller.rb +6 -2
  31. data/app/controllers/permission_forge/people_controller.rb +14 -14
  32. data/app/controllers/permission_forge/permission_set_editor.rb +20 -6
  33. data/app/controllers/permission_forge/permission_set_group_users_controller.rb +3 -1
  34. data/app/controllers/permission_forge/permission_set_groups_controller.rb +23 -9
  35. data/app/controllers/permission_forge/permission_set_rules_controller.rb +20 -10
  36. data/app/controllers/permission_forge/permission_sets_controller.rb +23 -24
  37. data/app/controllers/permission_forge/resource_actions_controller.rb +11 -6
  38. data/app/controllers/permission_forge/resource_fields_controller.rb +37 -19
  39. data/app/controllers/permission_forge/resources_controller.rb +12 -11
  40. data/app/frontend/permission_forge/pf_admin.css +99 -17
  41. data/app/frontend/permission_forge/pf_admin.js +36 -0
  42. data/app/helpers/permission_forge/application_helper.rb +22 -72
  43. data/app/helpers/permission_forge/audit_attribution_helper.rb +77 -0
  44. data/app/helpers/permission_forge/audit_helper.rb +57 -119
  45. data/app/helpers/permission_forge/audit_records_helper.rb +103 -0
  46. data/app/helpers/permission_forge/audit_sentences_helper.rb +56 -2
  47. data/app/helpers/permission_forge/badges_helper.rb +74 -17
  48. data/app/helpers/permission_forge/changes_helper.rb +24 -6
  49. data/app/helpers/permission_forge/conditions_helper.rb +119 -0
  50. data/app/helpers/permission_forge/labels_helper.rb +134 -0
  51. data/app/helpers/permission_forge/people_helper.rb +11 -19
  52. data/app/helpers/permission_forge/rule_problems_helper.rb +73 -0
  53. data/app/helpers/permission_forge/sentences_helper.rb +119 -98
  54. data/app/helpers/permission_forge/settings_helper.rb +2 -2
  55. data/app/helpers/permission_forge/ui_helper.rb +65 -4
  56. data/app/models/permission_forge/audit_event.rb +5 -1
  57. data/app/models/permission_forge/permission_set.rb +208 -18
  58. data/app/models/permission_forge/permission_set_group.rb +10 -4
  59. data/app/models/permission_forge/permission_set_group_user.rb +3 -1
  60. data/app/models/permission_forge/permission_set_rule.rb +254 -17
  61. data/app/models/permission_forge/permission_set_user.rb +38 -3
  62. data/app/models/permission_forge/resource.rb +18 -8
  63. data/app/models/permission_forge/resource_action.rb +15 -6
  64. data/app/models/permission_forge/resource_field.rb +97 -11
  65. data/app/views/permission_forge/assignments/confirm_destroy.html.erb +4 -4
  66. data/app/views/permission_forge/assignments/new.html.erb +10 -6
  67. data/app/views/permission_forge/audit_events/index.html.erb +1 -1
  68. data/app/views/permission_forge/audit_events/show.html.erb +16 -9
  69. data/app/views/permission_forge/bulk_assignments/confirm_revoke.html.erb +3 -3
  70. data/app/views/permission_forge/bulk_assignments/new.html.erb +3 -3
  71. data/app/views/permission_forge/field_lookups/show.html.erb +2 -2
  72. data/app/views/permission_forge/home/_broken_rules_card.html.erb +35 -0
  73. data/app/views/permission_forge/home/_conditions_card.html.erb +28 -0
  74. data/app/views/permission_forge/home/_ending_card.html.erb +11 -5
  75. data/app/views/permission_forge/home/_expired_card.html.erb +1 -1
  76. data/app/views/permission_forge/home/_mask_strategies_card.html.erb +27 -0
  77. data/app/views/permission_forge/home/_privacy_card.html.erb +21 -7
  78. data/app/views/permission_forge/home/_rules_card.html.erb +1 -1
  79. data/app/views/permission_forge/home/_secret_rules_card.html.erb +33 -0
  80. data/app/views/permission_forge/home/_stale_card.html.erb +7 -5
  81. data/app/views/permission_forge/home/_tidy_card.html.erb +1 -1
  82. data/app/views/permission_forge/home/index.html.erb +5 -6
  83. data/app/views/permission_forge/people/_access_tab.html.erb +26 -19
  84. data/app/views/permission_forge/people/_audit_tab.html.erb +8 -8
  85. data/app/views/permission_forge/people/_effective_field_source.html.erb +13 -7
  86. data/app/views/permission_forge/people/_effective_tab.html.erb +16 -15
  87. data/app/views/permission_forge/people/_effective_why.html.erb +20 -16
  88. data/app/views/permission_forge/people/_why_item.html.erb +1 -1
  89. data/app/views/permission_forge/people/confirm_remove_all.html.erb +3 -3
  90. data/app/views/permission_forge/people/erasure_preview.html.erb +1 -1
  91. data/app/views/permission_forge/permission_set_groups/confirm_destroy.html.erb +3 -3
  92. data/app/views/permission_forge/permission_set_groups/index.html.erb +3 -3
  93. data/app/views/permission_forge/permission_set_groups/show.html.erb +28 -19
  94. data/app/views/permission_forge/permission_set_rules/_builder.html.erb +35 -15
  95. data/app/views/permission_forge/permission_set_rules/_preview.html.erb +17 -0
  96. data/app/views/permission_forge/permission_set_rules/confirm_destroy.html.erb +3 -3
  97. data/app/views/permission_forge/permission_set_rules/preview.html.erb +12 -0
  98. data/app/views/permission_forge/permission_sets/_assignments_tab.html.erb +37 -22
  99. data/app/views/permission_forge/permission_sets/_audit_tab.html.erb +4 -4
  100. data/app/views/permission_forge/permission_sets/_condition_problems.html.erb +15 -0
  101. data/app/views/permission_forge/permission_sets/_conditions_tab.html.erb +14 -8
  102. data/app/views/permission_forge/permission_sets/_header.html.erb +6 -5
  103. data/app/views/permission_forge/permission_sets/_records_summary.html.erb +2 -2
  104. data/app/views/permission_forge/permission_sets/_resources_tab.html.erb +4 -4
  105. data/app/views/permission_forge/permission_sets/confirm_destroy.html.erb +4 -4
  106. data/app/views/permission_forge/permission_sets/confirm_switch_mode.html.erb +3 -3
  107. data/app/views/permission_forge/permission_sets/index.html.erb +6 -6
  108. data/app/views/permission_forge/permission_sets/new.html.erb +2 -2
  109. data/app/views/permission_forge/permission_sets/review.html.erb +13 -3
  110. data/app/views/permission_forge/permission_sets/show.html.erb +7 -5
  111. data/app/views/permission_forge/resource_actions/_across_sets.html.erb +7 -10
  112. data/app/views/permission_forge/resource_actions/_effect.html.erb +5 -5
  113. data/app/views/permission_forge/resource_actions/_form.html.erb +1 -1
  114. data/app/views/permission_forge/resource_actions/_managed_note.html.erb +5 -3
  115. data/app/views/permission_forge/resource_actions/confirm_destroy.html.erb +1 -1
  116. data/app/views/permission_forge/resource_actions/new.html.erb +1 -1
  117. data/app/views/permission_forge/resource_actions/show.html.erb +2 -2
  118. data/app/views/permission_forge/resource_fields/_explain.html.erb +19 -15
  119. data/app/views/permission_forge/resource_fields/show.html.erb +21 -12
  120. data/app/views/permission_forge/resources/_actions_tab.html.erb +4 -4
  121. data/app/views/permission_forge/resources/_fields_tab.html.erb +17 -9
  122. data/app/views/permission_forge/resources/_rules_tab.html.erb +9 -6
  123. data/app/views/permission_forge/resources/_sync.html.erb +8 -5
  124. data/app/views/permission_forge/resources/confirm_destroy.html.erb +3 -3
  125. data/app/views/permission_forge/resources/new.html.erb +3 -2
  126. data/app/views/permission_forge/resources/show.html.erb +6 -6
  127. data/app/views/permission_forge/settings/_row.html.erb +2 -2
  128. data/app/views/permission_forge/settings/show.html.erb +10 -1
  129. data/app/views/permission_forge/shared/_across_sets.html.erb +8 -9
  130. data/app/views/permission_forge/shared/_audit_events.html.erb +2 -2
  131. data/app/views/permission_forge/shared/_audit_footer.html.erb +13 -2
  132. data/app/views/permission_forge/shared/_crud_cell.html.erb +6 -6
  133. data/app/views/permission_forge/shared/_mode_banners.html.erb +1 -1
  134. data/app/views/permission_forge/shared/_savebar.html.erb +4 -2
  135. data/config/locales/permission_forge.en.yml +480 -69
  136. data/config/locales/permission_forge.mk.yml +499 -79
  137. data/config/locales/permission_forge.sq.yml +509 -80
  138. data/config/routes.rb +38 -23
  139. data/lib/generators/permission_forge/install/install_generator.rb +21 -0
  140. data/lib/generators/permission_forge/install/templates/initializer.rb.tt +35 -34
  141. data/lib/generators/permission_forge/install/templates/migration.rb.tt +5 -5
  142. data/lib/permission_forge/activation_conditions.rb +200 -0
  143. data/lib/permission_forge/admin/action_label.rb +33 -0
  144. data/lib/permission_forge/admin/action_rows.rb +3 -1
  145. data/lib/permission_forge/admin/actor_label.rb +52 -0
  146. data/lib/permission_forge/admin/attention_items.rb +152 -31
  147. data/lib/permission_forge/admin/audit_log.rb +4 -7
  148. data/lib/permission_forge/admin/audit_trail.rb +33 -17
  149. data/lib/permission_forge/admin/bulk_people_matcher.rb +32 -14
  150. data/lib/permission_forge/admin/chain_entries.rb +42 -0
  151. data/lib/permission_forge/admin/change_set.rb +12 -1
  152. data/lib/permission_forge/admin/change_set_parts/base.rb +5 -4
  153. data/lib/permission_forge/admin/change_set_parts/context.rb +3 -1
  154. data/lib/permission_forge/admin/change_set_parts/field_edit.rb +4 -1
  155. data/lib/permission_forge/admin/change_set_parts/field_levels.rb +1 -1
  156. data/lib/permission_forge/admin/change_set_parts/new_actions.rb +1 -1
  157. data/lib/permission_forge/admin/change_set_parts/new_fields.rb +38 -11
  158. data/lib/permission_forge/admin/change_set_parts/resource_edit.rb +17 -1
  159. data/lib/permission_forge/admin/change_set_parts/resource_flags.rb +1 -1
  160. data/lib/permission_forge/admin/change_set_parts/set_attrs.rb +4 -0
  161. data/lib/permission_forge/admin/change_set_parts/values.rb +10 -4
  162. data/lib/permission_forge/admin/column_fields.rb +22 -21
  163. data/lib/permission_forge/admin/conditions_form.rb +47 -15
  164. data/lib/permission_forge/admin/controller_catalog.rb +42 -14
  165. data/lib/permission_forge/admin/editable_lock.rb +83 -3
  166. data/lib/permission_forge/admin/effective_access.rb +147 -48
  167. data/lib/permission_forge/admin/effective_fields.rb +75 -67
  168. data/lib/permission_forge/admin/error_sentence.rb +47 -0
  169. data/lib/permission_forge/admin/expiry_presets.rb +17 -0
  170. data/lib/permission_forge/admin/exports/holdings.rb +6 -3
  171. data/lib/permission_forge/admin/field_across_sets.rb +7 -4
  172. data/lib/permission_forge/admin/field_chain.rb +109 -0
  173. data/lib/permission_forge/admin/field_detail.rb +24 -11
  174. data/lib/permission_forge/admin/field_label.rb +109 -0
  175. data/lib/permission_forge/admin/field_level.rb +4 -68
  176. data/lib/permission_forge/admin/field_provenance.rb +132 -0
  177. data/lib/permission_forge/admin/field_rows.rb +26 -11
  178. data/lib/permission_forge/admin/last_changes.rb +14 -0
  179. data/lib/permission_forge/admin/list_sentence.rb +32 -0
  180. data/lib/permission_forge/admin/mask_strategy_choices.rb +57 -0
  181. data/lib/permission_forge/admin/model_catalog.rb +83 -39
  182. data/lib/permission_forge/admin/model_label.rb +66 -0
  183. data/lib/permission_forge/admin/people_candidates.rb +21 -9
  184. data/lib/permission_forge/admin/people_directory.rb +23 -5
  185. data/lib/permission_forge/admin/permission_set_factory.rb +6 -15
  186. data/lib/permission_forge/admin/person_label.rb +105 -16
  187. data/lib/permission_forge/admin/prefill.rb +92 -0
  188. data/lib/permission_forge/admin/record_name.rb +45 -0
  189. data/lib/permission_forge/admin/rule_builder.rb +77 -3
  190. data/lib/permission_forge/admin/rule_form.rb +44 -10
  191. data/lib/permission_forge/admin/rule_form_input.rb +27 -11
  192. data/lib/permission_forge/admin/rule_notes.rb +43 -0
  193. data/lib/permission_forge/admin/rule_preview.rb +96 -0
  194. data/lib/permission_forge/admin/sensitive_columns.rb +10 -62
  195. data/lib/permission_forge/admin/settings_catalog.rb +64 -12
  196. data/lib/permission_forge/admin/state_label.rb +97 -0
  197. data/lib/permission_forge/admin_method_override.rb +44 -0
  198. data/lib/permission_forge/api/schema.rb +322 -0
  199. data/lib/permission_forge/api/serializers/base_serializer.rb +87 -1
  200. data/lib/permission_forge/api/serializers/permission_set_group_user_serializer.rb +1 -1
  201. data/lib/permission_forge/api/serializers/permission_set_rule_serializer.rb +1 -1
  202. data/lib/permission_forge/api/serializers/permission_set_serializer.rb +5 -2
  203. data/lib/permission_forge/api/serializers/permission_set_user_serializer.rb +1 -1
  204. data/lib/permission_forge/api/serializers/resource_action_serializer.rb +1 -1
  205. data/lib/permission_forge/api/serializers/resource_field_serializer.rb +1 -1
  206. data/lib/permission_forge/api/serializers/resource_serializer.rb +1 -1
  207. data/lib/permission_forge/api_authorizations.rb +59 -0
  208. data/lib/permission_forge/api_only_admin.rb +81 -0
  209. data/lib/permission_forge/audit/actor_codes.rb +32 -0
  210. data/lib/permission_forge/audit/actor_resolver.rb +1 -2
  211. data/lib/permission_forge/audit/boot_warnings.rb +29 -9
  212. data/lib/permission_forge/audit/event_catalog.rb +16 -6
  213. data/lib/permission_forge/audit/event_query.rb +3 -3
  214. data/lib/permission_forge/audit/reason_codes.rb +25 -0
  215. data/lib/permission_forge/audit/runtime.rb +9 -2
  216. data/lib/permission_forge/audit/settings_observer.rb +2 -2
  217. data/lib/permission_forge/audit/unmasked_without_user.rb +169 -0
  218. data/lib/permission_forge/audit.rb +24 -10
  219. data/lib/permission_forge/boot_checks.rb +180 -63
  220. data/lib/permission_forge/cache/base.rb +10 -0
  221. data/lib/permission_forge/cache/null_cache.rb +5 -0
  222. data/lib/permission_forge/cache/outcome.rb +119 -0
  223. data/lib/permission_forge/cache/rails_cache.rb +6 -0
  224. data/lib/permission_forge/cache/report.rb +150 -0
  225. data/lib/permission_forge/cache/user_keys.rb +8 -4
  226. data/lib/permission_forge/cache_warnings.rb +140 -0
  227. data/lib/permission_forge/concerns/auto_permission_scoping.rb +19 -2
  228. data/lib/permission_forge/concerns/has_tenant_scoping.rb +1 -1
  229. data/lib/permission_forge/concerns/has_uuid.rb +1 -1
  230. data/lib/permission_forge/concerns/keeps_copied_values.rb +48 -0
  231. data/lib/permission_forge/concerns/masked_attributes/alias_access.rb +12 -2
  232. data/lib/permission_forge/concerns/masked_attributes/virtual_readers.rb +6 -4
  233. data/lib/permission_forge/concerns/masked_attributes.rb +150 -34
  234. data/lib/permission_forge/concerns/normalizes_label.rb +78 -0
  235. data/lib/permission_forge/concerns/permission_cache_accessor.rb +3 -3
  236. data/lib/permission_forge/concerns/permission_scoped_findable.rb +121 -29
  237. data/lib/permission_forge/concerns/permissioned_user.rb +1 -1
  238. data/lib/permission_forge/concerns/records_audit_events.rb +13 -6
  239. data/lib/permission_forge/concerns/requires_name.rb +37 -0
  240. data/lib/permission_forge/concerns/validates_column_lengths.rb +24 -0
  241. data/lib/permission_forge/concerns/validates_dependency.rb +5 -2
  242. data/lib/permission_forge/concerns/validates_required_columns.rb +74 -0
  243. data/lib/permission_forge/conditional_sets.rb +13 -6
  244. data/lib/permission_forge/configuration/admin_ui_settings.rb +18 -4
  245. data/lib/permission_forge/configuration/audit_settings.rb +2 -1
  246. data/lib/permission_forge/configuration/controller_action_settings.rb +5 -4
  247. data/lib/permission_forge/configuration/masked_attributes_settings.rb +73 -19
  248. data/lib/permission_forge/configuration/presets.rb +20 -11
  249. data/lib/permission_forge/configuration/query_scoping_settings.rb +55 -0
  250. data/lib/permission_forge/configuration/strategy_values.rb +2 -1
  251. data/lib/permission_forge/configuration.rb +41 -18
  252. data/lib/permission_forge/controller_actions/managed_index.rb +8 -7
  253. data/lib/permission_forge/database_reach.rb +93 -0
  254. data/lib/permission_forge/deprecation.rb +1 -1
  255. data/lib/permission_forge/docs/api_samples.rb +250 -0
  256. data/lib/permission_forge/docs/configuration_reference.rb +172 -0
  257. data/lib/permission_forge/encrypted_attributes.rb +150 -0
  258. data/lib/permission_forge/engine.rb +46 -14
  259. data/lib/permission_forge/execution_state/restore.rb +74 -0
  260. data/lib/permission_forge/execution_state.rb +8 -1
  261. data/lib/permission_forge/field_level.rb +123 -0
  262. data/lib/permission_forge/field_names.rb +145 -0
  263. data/lib/permission_forge/field_variants.rb +96 -0
  264. data/lib/permission_forge/generated_text.rb +95 -0
  265. data/lib/permission_forge/inspection_filters.rb +83 -0
  266. data/lib/permission_forge/managed_fields.rb +66 -0
  267. data/lib/permission_forge/masked_models.rb +25 -19
  268. data/lib/permission_forge/masking_sync.rb +100 -25
  269. data/lib/permission_forge/model_bindings.rb +30 -19
  270. data/lib/permission_forge/model_lookup.rb +42 -0
  271. data/lib/permission_forge/operators/encrypted_alias.rb +67 -0
  272. data/lib/permission_forge/operators/registry.rb +6 -0
  273. data/lib/permission_forge/operators/rule_column.rb +242 -27
  274. data/lib/permission_forge/operators/rule_path.rb +179 -0
  275. data/lib/permission_forge/operators/rule_problem.rb +309 -0
  276. data/lib/permission_forge/operators/rule_sources.rb +96 -0
  277. data/lib/permission_forge/operators/value_casters/postgresql_types.rb +237 -0
  278. data/lib/permission_forge/operators/value_casters/temporal.rb +9 -20
  279. data/lib/permission_forge/operators/value_casters.rb +61 -13
  280. data/lib/permission_forge/operators/value_typing.rb +83 -7
  281. data/lib/permission_forge/query_scoping_warnings.rb +22 -17
  282. data/lib/permission_forge/rake_audit.rb +5 -4
  283. data/lib/permission_forge/rake_dry_run.rb +32 -0
  284. data/lib/permission_forge/rake_output.rb +189 -0
  285. data/lib/permission_forge/record_read_access.rb +51 -0
  286. data/lib/permission_forge/resource_chain.rb +14 -2
  287. data/lib/permission_forge/schema_read/ordered_types.rb +72 -0
  288. data/lib/permission_forge/schema_read.rb +335 -0
  289. data/lib/permission_forge/secret_columns.rb +49 -0
  290. data/lib/permission_forge/sensitive_columns.rb +114 -0
  291. data/lib/permission_forge/services/attribute_access_guard.rb +22 -14
  292. data/lib/permission_forge/services/bulk_permission_set_assignment.rb +16 -8
  293. data/lib/permission_forge/services/concerns/clonable.rb +9 -0
  294. data/lib/permission_forge/services/concerns/settles_cache.rb +58 -0
  295. data/lib/permission_forge/services/consent_withdrawal_handler.rb +37 -19
  296. data/lib/permission_forge/services/data_subject_erasure.rb +83 -45
  297. data/lib/permission_forge/services/expired_assignment_cleaner.rb +62 -25
  298. data/lib/permission_forge/services/extra_field_defaults.rb +1 -1
  299. data/lib/permission_forge/services/field_permission_merger.rb +44 -17
  300. data/lib/permission_forge/services/filters_response_attributes.rb +20 -5
  301. data/lib/permission_forge/services/gdpr_field_auditor/text_report.rb +33 -5
  302. data/lib/permission_forge/services/gdpr_field_auditor.rb +68 -48
  303. data/lib/permission_forge/services/host_key_guard.rb +8 -5
  304. data/lib/permission_forge/services/mask_value.rb +72 -11
  305. data/lib/permission_forge/services/permission_cache_clearer.rb +36 -15
  306. data/lib/permission_forge/services/permission_hash_builder.rb +48 -19
  307. data/lib/permission_forge/services/permission_rule_applier.rb +131 -68
  308. data/lib/permission_forge/services/permission_set_cloner.rb +32 -8
  309. data/lib/permission_forge/services/permission_set_condition_evaluator.rb +38 -36
  310. data/lib/permission_forge/services/permission_set_group_cloner.rb +2 -1
  311. data/lib/permission_forge/services/permits_attributes/result.rb +31 -0
  312. data/lib/permission_forge/services/permits_attributes.rb +48 -27
  313. data/lib/permission_forge/services/resource_field_generator/row_builder.rb +96 -0
  314. data/lib/permission_forge/services/resource_field_generator.rb +71 -42
  315. data/lib/permission_forge/services/resource_with_fields_builder.rb +2 -1
  316. data/lib/permission_forge/services/rls_operator_sql.rb +83 -24
  317. data/lib/permission_forge/services/rls_policy_generator.rb +83 -39
  318. data/lib/permission_forge/services/rls_read_access_sql.rb +131 -0
  319. data/lib/permission_forge/services/security_audit/action_check.rb +49 -5
  320. data/lib/permission_forge/services/security_audit/assignment_check.rb +2 -1
  321. data/lib/permission_forge/services/security_audit/audit_trail_check.rb +1 -3
  322. data/lib/permission_forge/services/security_audit/conditions_check.rb +92 -0
  323. data/lib/permission_forge/services/security_audit/config_check.rb +41 -18
  324. data/lib/permission_forge/services/security_audit/integrity_check.rb +71 -4
  325. data/lib/permission_forge/services/security_audit/masking_without_user.rb +66 -0
  326. data/lib/permission_forge/services/security_audit/personal_data_check.rb +7 -11
  327. data/lib/permission_forge/services/security_audit/rule_check.rb +180 -50
  328. data/lib/permission_forge/services/security_audit/text_report.rb +14 -2
  329. data/lib/permission_forge/services/security_audit/unmanaged_actions.rb +145 -0
  330. data/lib/permission_forge/services/security_audit/user_model_check.rb +4 -3
  331. data/lib/permission_forge/services/security_audit.rb +16 -4
  332. data/lib/permission_forge/services/stale_assignment_auditor.rb +8 -5
  333. data/lib/permission_forge/timestamp_fields.rb +60 -0
  334. data/lib/permission_forge/unique_conflict.rb +117 -0
  335. data/lib/permission_forge/version.rb +1 -1
  336. data/lib/permission_forge/virtual_fields/discovery.rb +2 -1
  337. data/lib/permission_forge/virtual_fields.rb +15 -5
  338. data/lib/permission_forge/warnings.rb +263 -0
  339. data/lib/permission_forge/web_request.rb +248 -0
  340. data/lib/permission_forge.rb +54 -0
  341. data/lib/tasks/permission_forge.rake +26 -6
  342. data/lib/tasks/permission_forge_audit_events.rake +8 -4
  343. data/lib/tasks/permission_forge_cache.rake +12 -12
  344. data/lib/tasks/permission_forge_docs.rake +48 -0
  345. data/lib/tasks/permission_forge_expiration.rake +11 -5
  346. data/lib/tasks/permission_forge_gdpr.rake +36 -20
  347. metadata +84 -1
@@ -3,14 +3,47 @@ mk:
3
3
  permission_forge:
4
4
  api:
5
5
  errors:
6
+ action_authorization_missing: Промените преку API бараат config.api_action_authorization;
7
+ се одбиваат додека не е поставено и config.api_require_authorization е вклучено
6
8
  action_not_authorized: Акцијата не е авторизирана
9
+ assignment_authorization_missing: Доделувањата преку API бараат config.api_assignment_authorization;
10
+ се одбиваат додека не е поставено и config.api_require_authorization е вклучено
7
11
  assignment_not_authorized: Доделувањето не е авторизирано
12
+ body_unreadable: Содржината на барањето не може да се прочита. Испратете валиден
13
+ JSON со Content-Type application/json.
14
+ boolean_invalid: мора да биде true или false
15
+ bulk_action_invalid: мора да биде assign или revoke
16
+ expires_at_past: мора да биде во иднина
8
17
  field_generation_failed: Не може да се генерираат полиња за овој ресурс
18
+ field_value_shape: мора да биде низа, број, true или false; листа од нив (ниту
19
+ една со запирка) само за in, not_in и between
20
+ flag_shape: мора да биде низа или null
9
21
  forbidden: Забрането
22
+ hour_shape: мора да биде цел број од 0 до 23, или null
23
+ integer_shape: мора да биде цел број
24
+ ip_list_empty: нема ниту една ставка; испратете null за да го отстраните условот
25
+ ip_list_shape: мора да биде низа или листа од низи (IP адреси или CIDR опсези),
26
+ или null
10
27
  not_editable: Овој запис не може да се уредува
11
28
  not_found: Записот не е пронајден
29
+ not_iso8601_time: не е датум или време во ISO 8601
30
+ not_null: Недостасува задолжителна вредност. Ништо не е зачувано.
31
+ record_not_unique: Друго барање го зачува истиот запис пред еден момент; тој
32
+ веќе постои
33
+ resource_names_no_model: не именува модел што оваа апликација може да го вчита
34
+ route_not_found: Ниедна крајна точка на API не одговара на оваа патека и метод
35
+ section_missing: недостасува, празно е или не е објект
36
+ stats_authorization_missing: GET /api/stats бара config.api_stats_authorization,
37
+ или config.api_stats_require_admin = false
12
38
  tenant_required: Ова барање нема закупец. API-то за администрација служи по
13
39
  еден закупец.
40
+ text_shape: мора да биде низа
41
+ unauthorized: Не сте автентицирани
42
+ user_id_invalid: не е id на корисник
43
+ user_id_missing: недостасува
44
+ user_ids_missing: мора да наведе барем еден корисник
45
+ user_ids_not_list: мора да биде листа од id на корисници
46
+ user_not_found: не именува никого што може да се додели
14
47
  assignments:
15
48
  confirm_destroy:
16
49
  body: "%{name} ќе го изгуби пристапот до %{resources}, освен ако друг сет
@@ -32,6 +65,7 @@ mk:
32
65
  expires: Истекува
33
66
  filter_sets: Филтрирај сетови на дозволи
34
67
  forever: без краен датум
68
+ locked_hint: 'Управувано од системот/API: тука не може да се додаваат корисници.'
35
69
  muting_notice: "⊘ Пригушувачки. %{sets} му одзема пристап на %{name}, без
36
70
  оглед на тоа што дозволуваат другите сетови."
37
71
  no_sets: Ниеден сет на дозволи не одговара.
@@ -106,6 +140,7 @@ mk:
106
140
  all_for_record: Сите настани на овој запис
107
141
  all_for_set: Сите настани на овој сет на дозволи
108
142
  all_in_action: Сите настани од оваа акција
143
+ all_unknown_actor: Сите настани без познат извршител
109
144
  attribute: Атрибут
110
145
  before: Пред
111
146
  changes: Пред и по
@@ -130,23 +165,30 @@ mk:
130
165
  snapshot_destroyed: Записот како што бил кога бил отстранет.
131
166
  source: Каде
132
167
  title: Ревизиски настан %{event}
168
+ unknown_actor_html: За оваа промена не е именуван актер (код извршен надвор
169
+ од барање, како runner или задача во позадина). Именувајте го со %{method}.
133
170
  uuid: Id на настанот
134
171
  value: Вредност
135
172
  what: Што
136
173
  who: Кој, каде и зошто
137
174
  audit_log:
175
+ actor_codes:
176
+ api_client: API клиент
177
+ boot: Стартување на апликацијата
138
178
  actor_named:
139
179
  api: "%{name} (API)"
140
180
  basic_auth: "%{name} (прозорец за лозинка)"
141
- actor_types:
142
- api: API клиент
143
- basic_auth: Прозорец за лозинка
144
- system: Систем
145
- unknown: Непознат
146
- user: Лице
147
181
  boolean:
148
182
  'false': Не
149
183
  'true': Да
184
+ cache_scope:
185
+ own_process: 'Кешираните дозволи беа исчистени само во процесот што го изврши
186
+ (складиште во меморија): секој друг процес ги задржа своите.'
187
+ server_process: 'Кешираните дозволи беа исчистени само во овој процес на серверот
188
+ (складиште во меморија): другите веб-работници и процесите за задачи ги
189
+ задржаа своите.'
190
+ unconfirmed: 'Складиштето за кеш живее во секој процес (складиште во меморија):
191
+ другите процеси во секој случај ги задржуваат своите кеширани дозволи.'
150
192
  categories:
151
193
  access: Пристап
152
194
  admin: Администрација
@@ -175,6 +217,8 @@ mk:
175
217
  page_of: Страница %{page} од %{pages}
176
218
  pages_label: Страници
177
219
  person_id: 'Лице #%{id}'
220
+ reason_codes:
221
+ expired: Датумот на завршување беше поминат
178
222
  reason_inline: 'Причина: %{reason}'
179
223
  refused:
180
224
  body: Читањето на ревизискиот дневник е ограничено со поставката audit_log_authorization,
@@ -184,8 +228,17 @@ mk:
184
228
  sentence_variants:
185
229
  assignment_revoked_expired: "%{actor} му го отстрани на %{person} сетот на
186
230
  дозволи %{set} откако истече на %{date}."
231
+ cache_cleared_unconfirmed: "%{actor} побара да се исчистат кешираните дозволи
232
+ на секој корисник, но складиштето за кеш не го потврди тоа: старите дозволи
233
+ може да останат во употреба додека не истече траењето на кешот."
234
+ cache_settled_unconfirmed: 'Кешираните дозволи на %{person} требаше да се
235
+ исчистат по промената од %{actor}, но складиштето за кеш не го потврди тоа:
236
+ старите може да останат во употреба додека не истече траењето на кешот.'
187
237
  field_access_limited: "%{actor} го прочита %{record} со овие полиња скриени
188
238
  или маскирани: %{fields}."
239
+ permissions_invalidated_unconfirmed: 'Кешираните дозволи на %{person} требаше
240
+ да се исчистат, но складиштето за кеш не го потврди тоа: старите може да
241
+ останат во употреба додека не истече траењето на кешот.'
189
242
  sentences:
190
243
  access:
191
244
  denied: На %{actor} му беше одбиен пристапот до %{record}.
@@ -210,6 +263,7 @@ mk:
210
263
  viewed: "%{actor} прегледа ревизиски податоци."
211
264
  cache:
212
265
  cleared: "%{actor} ги исчисти кешираните дозволи на сите корисници."
266
+ settled: Кешираните дозволи на %{person} беа исчистени по промената од %{actor}.
213
267
  cleanup:
214
268
  expired_assignments: "%{actor} ги отстрани истечените доделувања."
215
269
  consent:
@@ -222,6 +276,8 @@ mk:
222
276
  access: "%{actor} го прочита %{record}."
223
277
  sensitive_acknowledged: "%{actor} потврди дека полето %{record} во %{set}
224
278
  треба да се чита без маска."
279
+ unmasked_without_user: Поле од %{model} беше прочитано без маска во веб-барање
280
+ кога никој не беше најавен.
225
281
  group_membership:
226
282
  added: "%{actor} го додаде %{person} во %{group}."
227
283
  changed: "%{actor} го промени членството на %{person} во %{group}."
@@ -318,6 +374,9 @@ mk:
318
374
  will_assign:
319
375
  one: "%{count} ќе биде доделен"
320
376
  other: "%{count} ќе бидат доделени"
377
+ denials:
378
+ no_read_access: Немате дозвола да ги читате записите на %{resource}.
379
+ rule_default: Немате дозвола да го извршите ова дејство.
321
380
  errors:
322
381
  admin:
323
382
  action_format: Користете мали букви, бројки и долни црти, почнувајќи со буква
@@ -328,6 +387,10 @@ mk:
328
387
  flag: Флеговите на сесија можат да содржат само букви, бројки, точки, две
329
388
  точки, цртички и долни црти.
330
389
  group_blank: Дајте ѝ име на групата.
390
+ hours_equal: Почетниот и крајниот час мора да се разликуваат (прозорец од
391
+ 9 до 9 е празен).
392
+ hours_incomplete: Изберете го и почетниот и крајниот час.
393
+ hours_range: Изберете часови помеѓу 00:00 и 23:00.
331
394
  ip: 'Ред %{line}: „%{ip}“ не е валидна IP адреса или CIDR опсег.'
332
395
  person: Прво изберете корисник.
333
396
  resource_model: Изберете модел од листата.
@@ -375,9 +438,40 @@ mk:
375
438
  assigned:
376
439
  one: "%{set} е доделен на %{count} корисник."
377
440
  other: "%{set} е доделен на %{count} корисници."
441
+ assigned_cache_kept:
442
+ one: "%{set} е доделен на %{count} корисник, но складиштето за кеш не потврди
443
+ дека неговите кеширани дозволи се исчистени. Старите дозволи може да останат
444
+ во употреба додека не истече траењето на кешот."
445
+ other: "%{set} е доделен на %{count} корисници, но складиштето за кеш не
446
+ потврди дека нивните кеширани дозволи се исчистени. Старите дозволи може
447
+ да останат во употреба додека не истече траењето на кешот."
378
448
  revoked:
379
449
  one: "%{set} е одземен од %{count} корисник."
380
450
  other: "%{set} е одземен од %{count} корисници."
451
+ revoked_cache_kept:
452
+ one: "%{set} е одземен од %{count} корисник, но складиштето за кеш не потврди
453
+ дека неговите кеширани дозволи се исчистени. Старите дозволи може да останат
454
+ во употреба додека не истече траењето на кешот."
455
+ other: "%{set} е одземен од %{count} корисници, но складиштето за кеш не
456
+ потврди дека нивните кеширани дозволи се исчистени. Старите дозволи може
457
+ да останат во употреба додека не истече траењето на кешот."
458
+ cache_not_confirmed: 'Складиштето за кеш не потврди дека кешираните дозволи
459
+ се исчистени: старите дозволи може да останат во употреба додека не истече
460
+ траењето на кешот.'
461
+ cache_process_local: 'Складиштето за кеш живее само во овој процес на серверот
462
+ (складиште во меморија): другите веб-работници и процесите за задачи ги задржуваат
463
+ своите кеширани дозволи додека не се рестартираат или додека записите не истечат.'
464
+ copy_refused:
465
+ kinds:
466
+ permission_set: сетот на дозволи „%{name}“
467
+ permission_set_group: Permission Set Group „%{name}“
468
+ permission_set_rule: правилото „%{name}“
469
+ record: еден ред
470
+ resource: Resource „%{name}“
471
+ resource_action: акцијата „%{name}“
472
+ resource_field: полето „%{name}“
473
+ message: "„%{name}“ не беше копиран: %{record} содржи нешто што нов ред не
474
+ може да го содржи (%{errors}). Поправете го, па копирајте повторно."
381
475
  fields:
382
476
  acknowledged: Во ред. „%{field}“ нема повторно да биде означено во ревизијата
383
477
  на приватност.
@@ -391,6 +485,7 @@ mk:
391
485
  set_added: "„%{set}“ е преместен во оваа група."
392
486
  set_removed: "„%{set}“ е отстранет од оваа група."
393
487
  updated: Групата е зачувана. Ничиј пристап не е променет.
488
+ invalid_param: "%{param} %{detail}. Ништо не е променето."
394
489
  locked_widening: 'Овој сет на дозволи е заклучен: пристапот може да се отстрани
395
490
  или скрати, но не и да се даде или продолжи.'
396
491
  locked_widening_muting: 'Овој пригушувачки сет на дозволи е заклучен: носителите
@@ -400,7 +495,17 @@ mk:
400
495
  cleaned:
401
496
  one: Отстрането е %{count} истечено доделување.
402
497
  other: Отстранети се %{count} истечени доделувања.
498
+ cleaned_cache_kept:
499
+ one: Отстрането е %{count} истечено доделување, но складиштето за кеш не
500
+ потврди дека кешираните дозволи на засегнатите лица се исчистени. Старите
501
+ дозволи може да останат во употреба додека не истече траењето на кешот.
502
+ other: Отстранети се %{count} истечени доделувања, но складиштето за кеш
503
+ не потврди дека кешираните дозволи на засегнатите лица се исчистени. Старите
504
+ дозволи може да останат во употреба додека не истече траењето на кешот.
505
+ no_changes: Нема промени за зачувување.
403
506
  not_editable: Овој запис не може да се уредува.
507
+ not_null: Недостасуваше задолжителна вредност. Ништо не е променето; страницата
508
+ го покажува она што е сега.
404
509
  people:
405
510
  cache_refresh_failed: Кешираните дозволи на %{name} не можеше да се освежат.
406
511
  Складиштето за кеш не го потврди тоа, па старите дозволи може да останат
@@ -444,23 +549,33 @@ mk:
444
549
  duplicated_outside_group: 'Дуплирано е „%{name}“: ресурсите, полињата, акциите
445
550
  и правилата се копирани. Доделувањата не се. Копијата не е во „%{group}“,
446
551
  која е заклучена.'
447
- no_changes: Нема промени за зачувување.
552
+ nothing_applied: 'Нема што да се зачува: %{reasons}.'
448
553
  save_failed: 'Ништо не е зачувано: %{errors}'
449
554
  saved:
450
555
  one: Зачувана е %{count} промена. Сега важи за %{people}.
451
556
  other: Зачувани се %{count} промени. Сега важат за %{people}.
452
557
  switched_granting: "„%{name}“ сега дава пристап."
453
558
  switched_muting: "„%{name}“ сега е пригушувачки сет на дозволи."
559
+ record_not_unique: Друго барање го зачува истото пред еден момент. Ништо не
560
+ е променето; страницата покажува што има сега.
561
+ record_not_unique_detail: "%{detail} — друго барање го зачува пред еден момент.
562
+ Ништо не е променето; страницата покажува што има сега."
454
563
  resources:
455
564
  added:
456
565
  one: Додаден е %{resource} со %{count} поле.
457
566
  other: Додаден е %{resource} со %{count} полиња.
567
+ added_muting: Додаден е %{resource}. Одзема %{what}.
568
+ added_muting_nothing: 'Додаден е %{resource}. Сè уште не одзема ништо: изберете
569
+ подолу што одзема.'
458
570
  columns_added:
459
571
  one: Додадена е %{count} колона.
460
572
  other: Додадени се %{count} колони.
461
573
  missing_removed:
462
574
  one: Отстрането е %{count} поле чија колона веќе не постои.
463
575
  other: Отстранети се %{count} полиња чии колони веќе не постојат.
576
+ muted_fields:
577
+ one: "%{count} поле"
578
+ other: "%{count} полиња"
464
579
  removed: "%{resource} е отстранет од „%{set}“."
465
580
  rules:
466
581
  created: Додадено е правилото „%{rule}“.
@@ -477,6 +592,29 @@ mk:
477
592
  'off': Бележењето е исклучено во иницијализаторот (audit_events = false).
478
593
  Ниедна промена не се бележи.
479
594
  title: Ревизискиот дневник не бележи
595
+ broken_rules_card:
596
+ description: 'Овие правила за записи именуваат поле, табела, врска или услов
597
+ што не постои, или вредност што нивното поле не може да ја содржи. Секое
598
+ од нив не се совпаѓа со ништо: на секој на кого се однесува му е одбиен
599
+ секој запис на ресурсот.'
600
+ fix: Поправи го правилото
601
+ locked_fix_html: 'Заклучено (%{flag}): управувано е од системот или API што
602
+ го создал, па поправете го правилото таму (или отклучете го сетот во кодот).
603
+ Копија направена тука го остава ова правило какво што е.'
604
+ open: Отвори правила
605
+ people:
606
+ one: "%{count} корисник го има овој сет."
607
+ other: "%{count} корисници го имаат овој сет."
608
+ rule: "„%{rule}“ на %{resource} во „%{set}“"
609
+ title: Правила што не се совпаѓаат со ништо
610
+ conditions_card:
611
+ description: Овие сетови имаат услов што не може да се процени (IP што не
612
+ е адреса, ниту една ставка или расипан временски прозорец).
613
+ open: Поправи ги условите
614
+ people:
615
+ one: "%{count} корисник го има овој сет."
616
+ other: "%{count} корисници го имаат овој сет."
617
+ title: Услови за активирање што никој не може да ги процени
480
618
  ending_card:
481
619
  description: Доделувања што завршуваат во следните 7 дена.
482
620
  extend: Продолжи за 30 дена
@@ -522,8 +660,9 @@ mk:
522
660
  people:
523
661
  one: "%{count} корисник има"
524
662
  other: "%{count} корисници имаат"
525
- search_placeholder: Пребарајте корисник по име или е-пошта за да видите до
526
- што има пристап и зошто
663
+ search_help: Пребарајте корисник по име или е-пошта за да видите до што има
664
+ пристап и зошто
665
+ search_placeholder: Име или е-пошта
527
666
  sets:
528
667
  one: "%{count} активен сет на дозволи"
529
668
  other: "%{count} активни сетови на дозволи"
@@ -532,10 +671,24 @@ mk:
532
671
  one: "%{count} работа за преглед"
533
672
  other: "%{count} работи за преглед"
534
673
  title: Бара внимание
674
+ mask_strategies_card:
675
+ description: Ниту една вградена ниту прилагодена стратегија за маскирање нема
676
+ вакви имиња, па нивните вредности се маскираат целосно додека не изберете
677
+ стратегија или не ја вратите прилагодената.
678
+ field: "„%{field}“ на %{resource} во „%{set}“"
679
+ fix: Поправи го полето
680
+ people:
681
+ one: "%{count} корисник го има овој сет."
682
+ other: "%{count} корисници го имаат овој сет."
683
+ strategy_html: Стратегија %{strategy}
684
+ title: Полиња маскирани со непозната стратегија
535
685
  privacy_card:
686
+ by_name_note: Полињата се означуваат според името на колоната, па некои можеби
687
+ не се лични податоци (на пр. името на компанија).
536
688
  description: "%{unmasked}, %{unconfigured}."
537
689
  fix: Поправи
538
690
  intended: Ова е намерно
691
+ intended_note: Ако полето може да се гледа без маска, изберете Ова е намерно.
539
692
  per_set_note: Секој ред гледа еден сет на дозволи сам за себе. Корисник што
540
693
  има и друг сет што го конфигурира полето го следи тој сет.
541
694
  show_all: Прикажи ги сите %{count}
@@ -549,6 +702,7 @@ mk:
549
702
  unmasked:
550
703
  one: "%{count} чувствително поле се прикажува немаскирано"
551
704
  other: "%{count} чувствителни полиња се прикажуваат немаскирани"
705
+ view: Прегледај поле
552
706
  where: "%{resource} · Читливо немаскирано во „%{set}“ · %{people}"
553
707
  where_turned_off: "%{resource} · Поставката во „%{set}“ е исклучена, па полето
554
708
  се прикажува немаскирано · %{people}"
@@ -564,8 +718,8 @@ mk:
564
718
  find_by или permission_scoped.
565
719
  open: Отвори правила
566
720
  people:
567
- one: "%{count} лице го има овој сет."
568
- other: "%{count} лица го имаат овој сет."
721
+ one: "%{count} корисник го има овој сет."
722
+ other: "%{count} корисници го имаат овој сет."
569
723
  rules:
570
724
  one: "%{count} правило за %{resource} во „%{name}“"
571
725
  other: "%{count} правила за %{resource} во „%{name}“"
@@ -573,6 +727,18 @@ mk:
573
727
  важат само каде апликацијата користи find_by или permission_scoped. Другите
574
728
  барања (where, all, релации) ги враќаат сите записи.
575
729
  title: Правила за записи што не се применуваат насекаде
730
+ secret_rules_card:
731
+ column_html: Споредува %{column}
732
+ description: Овие правила за записи споредуваат колона што чува тајна. Сè
733
+ уште важат, но тоа кој запис кој корисник го гледа ја открива тајната. Споредете
734
+ друга колона или отстранете го правилото.
735
+ fix: Поправи го правилото
736
+ open: Отвори правила
737
+ people:
738
+ one: "%{count} корисник го има овој сет."
739
+ other: "%{count} корисници го имаат овој сет."
740
+ rule: "„%{rule}“ на %{resource} во „%{set}“"
741
+ title: Правила на тајни колони
576
742
  stale_card:
577
743
  assigned: Доделено на %{date} од %{by}
578
744
  description: Не се прегледани повеќе од %{days} дена. Потврдете дека на овие
@@ -670,21 +836,20 @@ mk:
670
836
  one: " и уште %{count}"
671
837
  other: " и уште %{count}"
672
838
  from: од %{set}
839
+ masked_by: Маскирано од %{set}
673
840
  muted_by: Скриено од %{set}
674
841
  none: Ниеден сет не го прикажува
675
- unconfigured: Не е конфигурирано · %{behaviour}
842
+ read_only_by: Ограничено на Само читање од %{set}
843
+ unconfigured: "%{state} · %{behaviour}"
676
844
  virtual: Виртуелно поле, читливо по основно
677
845
  effective_tab:
678
846
  conditional: "%{sets} важат само додека нивните услови за активирање се исполнети.
679
847
  Тука се вклучени."
680
848
  fields_visible: "%{visible} од %{total} полиња се видливи"
681
849
  grid_label: Ефективен пристап
682
- hidden_by_muting: Скриено со пригушување
683
850
  intro: Што може %{name} да прави во моментов, со сите сетови заедно. Изберете
684
851
  која било ќелија за да видите зошто.
685
852
  legend: Легенда
686
- legend_muted: Пригушено
687
- legend_none: Не е дадено
688
853
  why: Зошто
689
854
  why_empty: Изберете ќелија, поле или акција за да видите кој сет на дозволи
690
855
  го предизвикал тоа.
@@ -693,11 +858,17 @@ mk:
693
858
  action_granted: "%{set} ја дозволува оваа акција."
694
859
  action_muted: "%{set} ја блокира оваа акција."
695
860
  action_none: Ниеден сет на дозволи не ја дозволува оваа акција.
861
+ action_title: "%{action} · %{resource}"
862
+ field_base_unreadable: 'Скриено: наследува од %{resource}, каде Читање не
863
+ е дозволено.'
696
864
  field_capped: Се прикажува како Само читање бидејќи Уредување не е дозволено
697
865
  на овој ресурс.
698
- field_from: "%{set} го прикажува ова поле."
699
- field_muted: "%{set} го скрива или маскира ова поле."
866
+ field_decided_by: 'Одлучено од %{resource}, од кој наследува: победува најстрогата
867
+ поставка по наследувањето.'
868
+ field_hidden_on: Скриено на %{resource}, од кој наследува.
700
869
  field_none: Ниеден сет на дозволи не го прикажува ова поле.
870
+ field_own_unreadable: Скриено бидејќи Читање не е дозволено на овој ресурс.
871
+ field_title: "%{resource} › %{field}"
701
872
  field_unconfigured: 'Ниеден сет не ја конфигурира оваа колона: %{behaviour}.'
702
873
  field_variant: Ја следи поставката на %{base}.
703
874
  field_virtual: Виртуелно поле од моделот, читливо освен ако некој сет не го
@@ -705,6 +876,7 @@ mk:
705
876
  flag_granted: "%{set} дава %{flag}."
706
877
  flag_muted: "%{set} го пригушува %{flag}."
707
878
  flag_none: Ниеден сет на дозволи не дава %{flag}.
879
+ flag_title: "%{flag} %{resource}"
708
880
  no_rules: Нема правила за записи, па се прикажува секој запис.
709
881
  note_add_up: 'Сетовите на дозволи се собираат: доволно е едно доделување.'
710
882
  note_fields: Ако повеќе сетови прикажуваат едно поле, победува најотворената
@@ -770,7 +942,10 @@ mk:
770
942
  закупец и го чисти името од ревизискиот дневник.
771
943
  title: Бришење на податоци за субјектот…
772
944
  refresh:
773
- desc: 'Ретко потребно: промените веќе важат веднаш.'
945
+ desc: 'Потребно по промена од конзола, runner или задача во позадина кога
946
+ кешот е по процес (memory store): тој процес ги избриша само своите
947
+ записи, па овој веб-процес продолжува да ги дава старите дозволи додека
948
+ не истечат.'
774
949
  title: Освежи кеширани дозволи
775
950
  remove_all:
776
951
  desc: 'При заминување: го отстранува секое доделување.'
@@ -844,10 +1019,12 @@ mk:
844
1019
  field: Изберете поле за проверка.
845
1020
  list: Додадете барем една вредност во листата.
846
1021
  name_blank: Дајте му име на правилото.
1022
+ operator: Изберете услов од листата.
847
1023
  range: Внесете ги двата краја на опсегот.
848
1024
  value: Внесете вредност или изберете „тековниот корисник“.
849
1025
  field: Поле за проверка
850
1026
  follow: Следи врска
1027
+ ignored_field: без ред за поле (ignored_fields)
851
1028
  ignored_warning: Прикажи ги сите е вклучено за овој ресурс, па правилата за
852
1029
  записи се игнорираат додека не се исклучи.
853
1030
  include_nulls: Прикажи ги и записите каде %{field} е празно
@@ -864,19 +1041,36 @@ mk:
864
1041
  desc: Записите без поврзаниот запис се задржуваат.
865
1042
  title: И записи без него
866
1043
  message: Порака при блокирање
867
- message_placeholder: Се прикажува кога некој отвора запис што ова правило
868
- го скрива.
1044
+ message_help: Се прикажува кога некој отвора запис што ова правило го скрива.
1045
+ model_error: "%{field} %{message}"
869
1046
  model_missing: Овој модел или врска веќе не постои во апликацијата.
870
1047
  name: Име на правилото
871
1048
  name_placeholder: пр. Сопствени клиенти
1049
+ notes:
1050
+ secret_column:
1051
+ body_html: "%{column} чува тајна, па ново правило на неа се одбива. Ова
1052
+ правило сè уште важи, но тоа кој запис кој корисник го гледа ја открива
1053
+ тајната: споредете друга колона или отстранете го правилото."
1054
+ title: Ова правило споредува колона што чува тајна
872
1055
  operator: Услов
873
1056
  optional: опционално
1057
+ path_html: 'Патека на врски: %{path}'
874
1058
  pick_field: Изберете поле…
1059
+ pick_relationship: Изберете врска…
875
1060
  preview: Преглед
876
1061
  preview_empty: Изберете поле за да го видите правилото како реченица.
1062
+ preview_refused: Нема да се зачува
1063
+ problem_fixes:
1064
+ field: Изберете го полето повторно за да го поправите.
1065
+ join: Изберете повторно начин на комбинирање, под Напредно, за да го поправите.
1066
+ operator: Изберете го условот повторно за да го поправите.
1067
+ path: Изберете ја врската повторно за да ја поправите.
1068
+ value: Внесете вредност што ова поле може да ја содржи за да го поправите.
1069
+ problem_title: Ова правило не се совпаѓа со ништо
877
1070
  relationship: Врска
878
1071
  remove_step: Отстрани го овој чекор на врската
879
1072
  save: Зачувај правило
1073
+ stored_field: "%{name} (како што е зачувано)"
880
1074
  this_field: ова поле
881
1075
  update_form: Ажурирај
882
1076
  confirm_destroy:
@@ -887,6 +1081,9 @@ mk:
887
1081
  title: Уреди правило за %{resource}
888
1082
  new:
889
1083
  title: Ново правило за %{resource}
1084
+ preview:
1085
+ back: Назад кон правилата
1086
+ title: Преглед на правило за %{resource}
890
1087
  value_input:
891
1088
  from: Од
892
1089
  no_value: Не е потребна вредност за овој услов.
@@ -988,7 +1185,7 @@ mk:
988
1185
  copy_name: "%{name} (копија)"
989
1186
  header:
990
1187
  description: Опис
991
- description_placeholder: Додадете опис за другите да знаат кога да го користат
1188
+ description_placeholder: 'Додадете опис: кога се користи'
992
1189
  group: Група
993
1190
  name: Име
994
1191
  index:
@@ -1072,6 +1269,7 @@ mk:
1072
1269
  body_nobody: Сè уште никој го нема овој сет, па зачувувањето не влијае на
1073
1270
  никого додека не го доделите.
1074
1271
  crumb: Преглед
1272
+ not_applied: 'Не е применето:'
1075
1273
  save: Зачувај промени
1076
1274
  title:
1077
1275
  one: Прегледај %{count} промена
@@ -1128,10 +1326,14 @@ mk:
1128
1326
  овој ресурс, или внесете клуч што го проверува вашиот код.
1129
1327
  permitted: Дозволено
1130
1328
  managed_note:
1131
- body: Штом еден активен сет на дозволи има ред за некоја акција, само корисниците
1132
- чии сетови на дозволи ја дозволуваат можат да ја извршат. Сите други се
1133
- одбиваат.
1134
- title: Додавањето акција ја прави управувана за сите
1329
+ body_allowed: Штом еден активен сет на дозволи има ред за некоја акција, само
1330
+ корисниците чии сетови на дозволи ја дозволуваат можат да ја извршат. Сите
1331
+ други се одбиваат.
1332
+ body_blocked: Додека ниеден активен сет на дозволи нема ред за некоја акција,
1333
+ никој не може да ја изврши. Штом некој има, можат да ја извршат корисниците
1334
+ чии сетови на дозволи ја дозволуваат; сите други и понатаму се одбиваат.
1335
+ title_allowed: Додавањето акција ја прави управувана за сите
1336
+ title_blocked: Додавањето акција ја отвора за корисниците на кои им е дозволена
1135
1337
  unmanaged_allowed: Акција со која не управува ниеден сет на дозволи може да
1136
1338
  ја изврши секој.
1137
1339
  unmanaged_blocked: Акција со која не управува ниеден сет на дозволи е блокирана
@@ -1157,9 +1359,17 @@ mk:
1157
1359
  овој ресурс.
1158
1360
  full_picture: Види сè до што %{name} има пристап →
1159
1361
  granted: "%{name} го гледа преку %{sets}."
1160
- muted: "%{name} не го гледа во целост бидејќи %{sets} го скрива или маскира."
1362
+ hidden_by:
1363
+ one: "%{name} не го гледа: %{sets} го скрива."
1364
+ other: "%{name} не го гледа: %{sets} го скриваат."
1365
+ masked_by:
1366
+ one: "%{name} го гледа маскирано: %{sets} го маскира."
1367
+ other: "%{name} го гледа маскирано: %{sets} го маскираат."
1161
1368
  no_access: "%{name} не може да чита %{resources}."
1162
1369
  none: Ниеден сет не го прикажува ова поле на %{name}.
1370
+ read_only_by:
1371
+ one: "%{name} не може да го уредува: %{sets} ја одзема можноста за уредување."
1372
+ other: "%{name} не може да го уредува: %{sets} ја одземаат можноста за уредување."
1163
1373
  unconfigured: Ниеден сет не ја конфигурира оваа колона, па поставката за неконфигурирани
1164
1374
  полиња одлучува за %{name}.
1165
1375
  virtual_default: "%{name} го добива ова виртуелно поле по основно, читливо
@@ -1180,6 +1390,7 @@ mk:
1180
1390
  flags_muting_note: Во пригушувачките сетови овие флегови значат „отстрани“.
1181
1391
  impact: Со зачувување, ова веднаш важи за %{people}.
1182
1392
  label: Ознака
1393
+ locked_impact: Заклучено, па ништо овде не може да се зачува.
1183
1394
  mask_strategy: Стратегија за маскирање
1184
1395
  muting_note: Ова е пригушувачки сет на дозволи. Изборите тука одземаат пристап.
1185
1396
  no_rules: Ниедно правило во овој сет не филтрира по ова поле.
@@ -1188,15 +1399,20 @@ mk:
1188
1399
  not_configured_implicit: 'Нема поставка за ова поле во „%{set}“. Ја следи
1189
1400
  поставката „Виртуелни полиња без поставка“: со тековната конфигурација е
1190
1401
  читливо и уредливо по основно.'
1402
+ not_configured_muting: Нема поставка за оваа колона во „%{set}“, па овој пригушувачки
1403
+ сет на дозволи не одзема ништо од неа.
1191
1404
  pick_person: Изберете корисник…
1192
1405
  save: Зачувај
1193
- sensitive: 'Одговара на шаблонот за приватност „%{pattern}“. Препорачано:
1194
- Маскирано (%{strategy}).'
1406
+ sensitive: 'Одговара на шаблонот за приватност „%{pattern}“, па можеби е личен
1407
+ податок. Препорачано: Маскирано (%{strategy}).'
1195
1408
  turned_off: 'Поставката за ова поле во „%{set}“ е исклучена, па не се применува.
1196
1409
  Со тековната конфигурација полето е: %{behaviour}.'
1197
1410
  turned_off_implicit: 'Поставката за ова поле во „%{set}“ е исклучена, па не
1198
1411
  се применува. Полето ја следи поставката „Виртуелни полиња без поставка“:
1199
1412
  со тековната конфигурација е читливо и уредливо по основно.'
1413
+ turned_off_muting: Поставката за ова поле во „%{set}“ е исклучена, па овој
1414
+ пригушувачки сет на дозволи не одзема ништо од него.
1415
+ unknown_strategy: "(непозната — целосно маскирано додека не изберете една)"
1200
1416
  used_by_rules: Се користи во правила
1201
1417
  variants: 'Важи и за:'
1202
1418
  variants_muting: 'Пригушувањето на ова ги пригушува и:'
@@ -1247,20 +1463,12 @@ mk:
1247
1463
  filter_label: Филтрирај полиња
1248
1464
  filters:
1249
1465
  all: Сите
1250
- edit: Може да се уредува
1251
- hidden: Скриено
1252
- hide: Скриено
1253
- leave: Непроменето
1254
- mask: Присилно маскирање
1255
- masked: Маскирано
1256
- read: Само читање
1257
- sensitive: Чувствително
1258
- unconfigured: Не е конфигурирано
1259
1466
  implicit_grant: Уредливо по основно
1260
1467
  level: Ниво на пристап
1261
1468
  level_aria: Ниво на пристап за %{field}
1469
+ mutes_nothing: Не одзема ништо
1262
1470
  no_match: Ниедно поле не одговара.
1263
- not_configured: Не е конфигурирано · %{behaviour}
1471
+ not_configured: "%{state} · %{behaviour}"
1264
1472
  read_off: Вклучете Читање за %{resource} за да изберете кои полиња ги гледаат
1265
1473
  корисниците.
1266
1474
  search: Пребарај полиња
@@ -1282,15 +1490,17 @@ mk:
1282
1490
  models: Модели
1283
1491
  no_models: Ниеден модел не одговара.
1284
1492
  note: Полињата ќе бидат креирани од колоните и виртуелните полиња на моделот.
1285
- note_gdpr: Полињата ќе бидат креирани од колоните и виртуелните полиња на
1493
+ note_gdpr: 'Полињата ќе бидат креирани од колоните и виртуелните полиња на
1286
1494
  моделот. Стандардите за приватност се вклучени, па чувствителните колони
1287
- почнуваат како Маскирано.
1495
+ почнуваат како Маскирано, освен со Целосен пристап: тогаш само се означуваат
1496
+ како чувствителни, за вие да ги маскирате.'
1288
1497
  presets:
1289
1498
  block_changes:
1290
1499
  desc: Ги пригушува Креирање, Уредување, Бришење и секоја акција.
1291
1500
  title: Блокирај ги сите промени
1292
1501
  full:
1293
- desc: Читање, креирање, уредување и бришење. Сите полиња може да се уредуваат.
1502
+ desc: Читање, креирање, уредување и бришење. Сите полиња може да се уредуваат,
1503
+ ниедно не е маскирано.
1294
1504
  title: Целосен пристап
1295
1505
  hide_sensitive:
1296
1506
  desc: Ја скрива секоја колона што личи на лични податоци.
@@ -1316,7 +1526,7 @@ mk:
1316
1526
  all_queries: важи за сите барања
1317
1527
  blocked_message: 'Порака при блокирање: „%{message}“'
1318
1528
  empty: 'Сè уште нема правила, па записите не се ограничени: секој со овој
1319
- сет ги гледа сите %{resources} што може да ги чита.'
1529
+ сет ги гледа сите записи од %{resource} што може да ги чита.'
1320
1530
  empty_muting: Пригушувачките сетови на дозволи не додаваат правила за записи.
1321
1531
  empty_view_all: Нема правила. Прикажи ги сите е вклучено, па секој запис е
1322
1532
  вклучен во секој случај.
@@ -1352,7 +1562,7 @@ mk:
1352
1562
  modify_all_needs: Бара Прикажи ги сите и Уредување.
1353
1563
  muting_hint: Пригушените акции им се одземаат на корисниците со овој сет,
1354
1564
  без оглед на тоа што дозволуваат другите сетови.
1355
- muting_note: Поставките тука им одземаат пристап на корисниците на %{set}.
1565
+ muting_note: Поставките тука им одземаат пристап на сите што го имаат „%{set}“.
1356
1566
  needs_read_hint: Уредување и Бришење бараат Читање.
1357
1567
  record_scope: Опсег на записи
1358
1568
  remove: Отстрани %{resource} од овој сет…
@@ -1374,7 +1584,8 @@ mk:
1374
1584
  read: Додај ги сите нови како Само читање
1375
1585
  gdpr_off: Стандардите за приватност се исклучени.
1376
1586
  gdpr_on: 'Стандардите за приватност се вклучени: чувствителните колони се
1377
- додаваат како Маскирано.'
1587
+ додаваат како Маскирано, освен со целосен пристап (тогаш само се означуваат
1588
+ како чувствителни).'
1378
1589
  ignored_count:
1379
1590
  one: "%{count} се игнорира"
1380
1591
  other: "%{count} се игнорираат"
@@ -1387,6 +1598,9 @@ mk:
1387
1598
  new_count:
1388
1599
  one: "%{count} нова колона не е конфигурирана"
1389
1600
  other: "%{count} нови колони не се конфигурирани"
1601
+ new_count_muting:
1602
+ one: "%{count} колона без поставка, па не одзема ништо"
1603
+ other: "%{count} колони без поставка, па не одземаат ништо"
1390
1604
  new_title: Нови колони, неконфигурирани
1391
1605
  none: Нема
1392
1606
  remove_missing: Отстрани ги полињата што недостасуваат
@@ -1470,6 +1684,9 @@ mk:
1470
1684
  api_serializer_overrides:
1471
1685
  desc: Замени за тоа како записите се запишуваат во API одговорите.
1472
1686
  name: Прилагодени серијализатори
1687
+ api_stats_authorization:
1688
+ desc: Одлучува кој може да ја чита статистиката за користење преку API.
1689
+ name: Проверка на API статистиката
1473
1690
  api_stats_require_admin:
1474
1691
  desc: Само администраторите можат да ја читаат статистиката за користење
1475
1692
  преку API.
@@ -1590,7 +1807,8 @@ mk:
1590
1807
  да не се прикажуваат во дневниците.
1591
1808
  name: Филтрирај чувствителни вредности од дневниците
1592
1809
  gdpr_defaults:
1593
- desc: Колоните што изгледаат лични се маскираат по основно кога се додаваат.
1810
+ desc: Колоните што изгледаат лични се маскираат по основно кога се додаваат,
1811
+ освен кога се додаваат со целосен пристап.
1594
1812
  name: Стандарди за приватност
1595
1813
  gdpr_field_patterns:
1596
1814
  desc: Имињата на колони што одговараат на шаблон се означуваат како чувствителни
@@ -1622,9 +1840,13 @@ mk:
1622
1840
  код ги чита од моделот.
1623
1841
  name: Маскирај виртуелни полиња на моделите
1624
1842
  masked_attributes_nil_user_strategy:
1625
- desc: 'Дали маскираните модели ги враќаат зачуваните или скриените вредности
1626
- кога нема тековен корисник (задачи, е-пошта, конзола). Моделот на корисникот
1627
- останува читлив: најавувањето го чита пред некој да е најавен.'
1843
+ desc: 'Што враќаат маскираните модели кога нема тековен корисник. bypass:
1844
+ зачуваните вредности секаде (секое читање во веб-барање се запишува во
1845
+ логот и се објавува како настан за ревизија). hide_in_requests: скриени
1846
+ вредности во веб-барања (јавна страница, контролер што заборавил најава),
1847
+ зачуваните вредности во задачи во позадина, rake-задачи и конзолата. hide:
1848
+ скриени вредности секаде. Моделот на корисникот останува читлив: најавувањето
1849
+ го чита пред некој да е најавен.'
1628
1850
  name: Маскирани атрибути кога никој не е најавен
1629
1851
  masked_write_protection:
1630
1852
  desc: Спречува маскирана вредност како „•••• 4821“ да се зачува врз вистинската.
@@ -1633,6 +1855,11 @@ mk:
1633
1855
  desc: Дали правилата се прескокнуваат, сè се одбива, или се јавува грешка
1634
1856
  кога нема тековен корисник.
1635
1857
  name: Правила за записи кога никој не е најавен
1858
+ no_read_access_strategy:
1859
+ desc: 'Што враќаат пребарувањата на записи за најавен корисник чии сетови
1860
+ на дозволи не даваат Читање на ресурсот: редовите што ги дозволуваат правилата
1861
+ за записи (без правило, секој ред), или ниеден.'
1862
+ name: Записи без пристап за читање
1636
1863
  omit_hidden_in_attributes_hash:
1637
1864
  desc: Скриените полиња се отстрануваат од хеш-мапите на атрибути наместо
1638
1865
  да се постават како празни.
@@ -1670,6 +1897,11 @@ mk:
1670
1897
  rls_session_variable:
1671
1898
  desc: Име на променливата што ѝ кажува на базата кој е тековниот корисник.
1672
1899
  name: Променлива на сесија во базата
1900
+ rule_secret_column_patterns:
1901
+ desc: Правилата за записи не смеат да споредуваат колони што одговараат
1902
+ на овие шаблони (хешеви на лозинки, токени, колони encrypted_*). Празна
1903
+ листа ги дозволува.
1904
+ name: Шаблони за тајни колони
1673
1905
  snapshot_transactions:
1674
1906
  desc: 'Дали една трансакција во базата продолжува да ги гледа податоците
1675
1907
  како што биле кога започнала. Дозволите пресметани во таква трансакција
@@ -1745,9 +1977,12 @@ mk:
1745
1977
  gdpr_defaults: Новите чувствителни колони почнуваат маскирани.
1746
1978
  http_basic_auth_enabled: Пристапот до овие екрани е заштитен.
1747
1979
  masked_attributes_nil_user_strategy: Маскираните модели ги кријат вредностите
1748
- кога никој не е најавен (моделот на корисникот останува читлив за најавување).
1980
+ кога никој не е најавен, барем во веб-барања (моделот на корисникот останува
1981
+ читлив за најавување).
1749
1982
  masked_write_protection: Маскираните вредности никогаш не се запишуваат назад.
1750
1983
  nil_user_strategy: Кодот без најавен корисник не гледа записи.
1984
+ no_read_access_strategy: Најавените корисници без Читање на ресурс не гледаат
1985
+ ниту еден негов запис.
1751
1986
  preset: Однапред поставените вредности :strict ги затвораат поставувањата
1752
1987
  што стандардно оставаат отворен пристап.
1753
1988
  unconfigured_action_strategy: Акциите на контролери што никој не ги конфигурирал
@@ -1761,25 +1996,31 @@ mk:
1761
1996
  или ревизиската табела недостасува). Со audit_events = true и без табела,
1762
1997
  секоја промена не успева (со стандардната стратегија :raise).
1763
1998
  audit_trail_enabled: Никој не се бележи како креатор или уредувач на записите.
1999
+ auto_query_scoping: 'Правилата за записи се користат, но важат само за пребарувањата
2000
+ find_by и permission_scoped: другите барања ги враќаат сите записи.'
1764
2001
  conditional_sets_strict_mode: Условените сетови се третираат како активни
1765
- кога недостасуваат информации за барањето (fail-open).
2002
+ кога недостасуваат информации за барањето (без нив пристапот останува отворен).
1766
2003
  http_basic_auth_enabled: Овие екрани се или заклучени (барањето лозинка е
1767
2004
  вклучено, но нема податоци за најава) или незаштитени (нема лозинка ниту
1768
2005
  прилагоден администраторски контролер).
1769
2006
  masked_write_protection: Маскираните вредности може да се зачуваат врз вистинските
1770
2007
  податоци.
2008
+ unconfigured_action_strategy: Акциите на контролери што никој не ги конфигурирал
2009
+ може да ги изврши секој најавен корисник (изречно отстапување од стандардното
2010
+ :block).
1771
2011
  unconfigured_field_strategy: Колоните што никој не ги конфигурирал се прикажуваат
1772
2012
  немаскирани на секој што може да го чита ресурсот.
1773
2013
  row:
1774
2014
  changed: Променето
1775
- default: 'Стандардно: %{value}'
1776
- docs: 'Документација за конфигурација: %{key} ↗'
2015
+ default_html: 'Стандардно: %{value}'
2016
+ docs_html: 'Документација за конфигурација: %{key} ↗'
1777
2017
  how_to_change: Како да се промени
1778
2018
  risk: Ризик
1779
2019
  secure: Безбедно
1780
2020
  snippet_current: Примерот ја прикажува тековната вредност.
1781
2021
  snippet_recommended: Примерот ја прикажува препорачаната вредност.
1782
- step_deploy: Направете commit и deploy (или рестартирајте го серверот локално).
2022
+ step_deploy: Зачувајте ја промената во кодот и објавете ја апликацијата (или
2023
+ рестартирајте го серверот локално).
1783
2024
  step_edit: Уредете ја датотеката погоре.
1784
2025
  step_reload: Освежете ја оваа страница за потврда.
1785
2026
  sections:
@@ -1800,6 +2041,9 @@ mk:
1800
2041
  record_rules: Правила за записи и ограничување на барањата
1801
2042
  show:
1802
2043
  api_disabled_html: API е исклучен (%{key}).
2044
+ attention:
2045
+ one: Почетната страница наведува %{count} ставка што бара внимание.
2046
+ other: Почетната страница наведува %{count} ставки што бараат внимание.
1803
2047
  changed_count:
1804
2048
  one: "%{count} променета"
1805
2049
  other: "%{count} променети"
@@ -1807,15 +2051,22 @@ mk:
1807
2051
  has_risk: Има ризична поставка
1808
2052
  health: Преглед на состојбата
1809
2053
  how_to_fix: Како да се поправи
1810
- intro_html: Поставките се дефинирани во %{file}. Промените бараат deploy/рестарт.
1811
- Оваа страница ги прикажува тековните вредности и како да се променат.
2054
+ intro_html: Поставките се дефинирани во %{file}. Промените бараат ново издание
2055
+ или рестарт. Оваа страница ги прикажува тековните вредности и како да се
2056
+ променат.
1812
2057
  no_match: Ниедна поставка не одговара.
2058
+ open_home: Отвори ја почетната страница
1813
2059
  read_only: Само читање
1814
2060
  search: Пребарај поставки
1815
2061
  section_meta: "%{settings} · %{changed}"
1816
2062
  secure_count:
1817
2063
  one: "%{count} поставка за безбедност и приватност изгледа добро."
1818
2064
  other: "%{count} поставки за безбедност и приватност изгледаат добро."
2065
+ secure_count_set:
2066
+ one: "%{count} поставка за безбедност и приватност е поставена како што
2067
+ се препорачува."
2068
+ other: "%{count} поставки за безбедност и приватност се поставени како што
2069
+ се препорачува."
1819
2070
  settings_count:
1820
2071
  one: "%{count} поставка"
1821
2072
  other: "%{count} поставки"
@@ -1849,18 +2100,17 @@ mk:
1849
2100
  set: Поставено
1850
2101
  shared:
1851
2102
  across_sets:
1852
- muted_hidden: 'Пригушено: скриено'
1853
2103
  none: Ниеден сет на дозволи не го содржи овој ресурс.
1854
2104
  active: Активен
1855
2105
  audit_footer:
1856
2106
  created: Креирано од %{created_by} · %{created_at}
1857
2107
  disabled: Не се бележи кој креирал и кој уредувал.
1858
2108
  edited: Последно уредено од %{updated_by} · %{updated_at}
2109
+ edited_at: Последно уредено %{updated_at}
1859
2110
  history: Историја
1860
2111
  crud_cell:
1861
2112
  allowed: Дозволено
1862
2113
  muted: Пригушено
1863
- needs_read: Прво вклучете Читање
1864
2114
  needs_read_short: Бара Читање
1865
2115
  'no': Не
1866
2116
  unchanged: Непроменето
@@ -1923,8 +2173,6 @@ mk:
1923
2173
  copied: Копирано
1924
2174
  copy: Копирај
1925
2175
  summary: Технички детали
1926
- time_ago: пред %{time}
1927
- time_nil: "—"
1928
2176
  toasts:
1929
2177
  dismiss: Затвори
1930
2178
  undo: Врати
@@ -1935,6 +2183,11 @@ mk:
1935
2183
  user_select_prompt: Изберете корисник...
1936
2184
  user_select_truncated: Прикажани се само првите %{count} корисници. Конфигурирајте
1937
2185
  user_list_resolver за да ја стесните листата.
2186
+ support:
2187
+ array:
2188
+ last_word_connector: " и "
2189
+ two_words_connector: " и "
2190
+ words_connector: ", "
1938
2191
  ui:
1939
2192
  actions: Акции
1940
2193
  apply: Примени
@@ -1945,7 +2198,14 @@ mk:
1945
2198
  reviewed_by: Прегледано од %{who} на %{date}
1946
2199
  reviewed_on: Прегледано на %{date}
1947
2200
  audit:
1948
- system: Систем
2201
+ csv:
2202
+ created_at: Создадено на
2203
+ created_by: Создадено од
2204
+ edited_at: Последна промена на
2205
+ edited_by: Последна промена од
2206
+ record: Запис
2207
+ type: Тип
2208
+ where: Каде
1949
2209
  types:
1950
2210
  action: Акција
1951
2211
  assignment: Доделување
@@ -1960,21 +2220,24 @@ mk:
1960
2220
  column_missing: Колоната недостасува
1961
2221
  conditional: Условен
1962
2222
  expired: Истечено
1963
- fail_open: Fail-open
1964
- fail_open_long: 'Fail-open: активен кога недостасуваат информации за барањето'
2223
+ fail_open: Активен при недостиг
2224
+ fail_open_long: 'Активен при недостиг: важи и кога недостасуваат информации
2225
+ за барањето'
1965
2226
  fail_open_title: conditional_sets_strict_mode е исклучен
1966
- locked: Заклучено
1967
2227
  muting: Пригушувачки
1968
- not_configured: Не е конфигурирано
1969
2228
  'off': Исклучено
1970
2229
  sensitive: Чувствително
2230
+ unknown_mask_strategy: Непозната стратегија за маскирање — целосно маскирано
2231
+ додека не се поправи
1971
2232
  virtual: Виртуелно
1972
2233
  breadcrumb: Патека
1973
2234
  cancel: Откажи
1974
2235
  changes:
1975
2236
  action_managed_already: "(веќе е управувано; сетови што го дозволуваат: %{sets})"
1976
- action_managed_first: "(со ова станува управувано: отсега само корисниците
2237
+ action_managed_first_allowed: "(со ова станува управувано: отсега само корисниците
1977
2238
  чии сетови на дозволи го дозволуваат можат да го извршат)"
2239
+ action_managed_first_blocked: "(првиот ред за него: отсега можат да го извршат
2240
+ корисниците чии сетови на дозволи го дозволуваат; досега никој не можеше)"
1978
2241
  action_managed_later: "(ќе важи штом овој сет и овој ресурс бидат вклучени)"
1979
2242
  action_managed_nobody: "(веќе е управувано; ниеден сет на дозволи сè уште
1980
2243
  не го дозволува)"
@@ -2001,6 +2264,10 @@ mk:
2001
2264
  flag_off_muting: "%{resource}: %{flag} веќе не е пригушено"
2002
2265
  flag_on: "%{resource}: %{flag} дозволено"
2003
2266
  flag_on_muting: "%{resource}: %{flag} пригушено"
2267
+ not_applied_read: "%{resource}: %{flag} не е вклучено, бидејќи „Читање“ е
2268
+ исклучено"
2269
+ not_applied_view_all_and_edit: "%{resource}: %{flag} не е вклучено, бидејќи
2270
+ бара „Прикажи ги сите“ и „Уредување“"
2004
2271
  resource_text: "%{resource}: %{attribute} е променето"
2005
2272
  set_group: Преместено во групата „%{group}“
2006
2273
  set_no_group: Отстрането од својата група
@@ -2010,6 +2277,9 @@ mk:
2010
2277
  close: Затвори
2011
2278
  conditions:
2012
2279
  always: Секогаш активен. Нема услови за активирање.
2280
+ effect:
2281
+ granting: Никогаш не е исполнет, па не дава ништо.
2282
+ muting: 'Пригушувачки сет на дозволи: важи за секое барање.'
2013
2283
  flag_generic: кога е поставен %{flag}
2014
2284
  flags:
2015
2285
  marketing_consent: кога е дадена согласност за маркетинг
@@ -2017,9 +2287,26 @@ mk:
2017
2287
  sso_login: по најава преку SSO на компанијата
2018
2288
  from_ips: од %{ips}
2019
2289
  hours: помеѓу %{from} и %{to}
2290
+ hours_broken: помеѓу %{from} и %{to} (прозорец што никој не може да го процени
2291
+ — поправете го во јазичето Услови)
2292
+ hours_broken_here: помеѓу %{from} и %{to} (прозорец што никој не може да го
2293
+ процени)
2020
2294
  hours_overnight: помеѓу %{from} и %{to} (преку ноќ)
2295
+ ips_broken: од %{ips} (листа што никој не може да ја процени — поправете ја
2296
+ во јазичето Услови)
2297
+ ips_broken_here: од %{ips} (листа што никој не може да ја процени)
2298
+ no_hour: без час
2021
2299
  only_works: Работи само %{parts}.
2022
2300
  or: " или "
2301
+ problems:
2302
+ flag_unusable_html: Знакот на сесијата %{flag} содржи контролен знак, па
2303
+ ниедно барање не може да го носи.
2304
+ hours_equal: Почетниот и крајниот час се исти, па прозорецот е празен.
2305
+ hours_incomplete: Поставен е само еден од двата часа.
2306
+ hours_range: Еден час е надвор од 00:00–23:00.
2307
+ ip_empty: Листата на IP адреси има само раздвојувачи, ниту една ставка.
2308
+ ip_entry_html: "%{entry} не е IP адреса или CIDR опсег."
2309
+ problems_title: Овие услови не може да се проценат
2023
2310
  dates:
2024
2311
  days_ago:
2025
2312
  one: пред %{count} ден
@@ -2060,16 +2347,13 @@ mk:
2060
2347
  read_access: Читање
2061
2348
  view_all: Прикажи ги сите
2062
2349
  keep: Задржи
2063
- levels:
2064
- edit: Може да се уредува
2065
- hidden: Скриено
2066
- hide: Скриј
2067
- leave: Непроменето
2068
- mask: Присилно маскирање
2069
- masked: Маскирано
2070
- muted: Пригушено
2071
- none: Не е конфигурирано
2072
- read: Само читање
2350
+ level_sentences:
2351
+ edit: "%{set} го прикажува ова поле и дозволува негово уредување."
2352
+ hide: "%{set} го скрива ова поле."
2353
+ mask: "%{set} присилно го маскира ова поле."
2354
+ masked: "%{set} го прикажува ова поле маскирано (%{strategy})."
2355
+ no_edit: "%{set} ја одзема можноста за уредување на ова поле."
2356
+ read: "%{set} го прикажува ова поле само за читање."
2073
2357
  locked:
2074
2358
  title: 'Заклучено: управувано од системот/API'
2075
2359
  mask_strategies:
@@ -2090,6 +2374,7 @@ mk:
2090
2374
  nov: ное
2091
2375
  oct: окт
2092
2376
  sep: сеп
2377
+ needs_read_first: Прво вклучете Читање
2093
2378
  next: Следно
2094
2379
  no_group: Не е во група
2095
2380
  open_person: Отвори корисник
@@ -2117,50 +2402,185 @@ mk:
2117
2402
  records: Записи
2118
2403
  remove: Отстрани
2119
2404
  resource: Ресурс
2405
+ resource_plural:
2406
+ one: запис %{name}
2407
+ other: записи %{name}
2120
2408
  rules:
2121
2409
  and: и
2122
2410
  current_user: тековниот корисник
2411
+ matches_nothing: Не се совпаѓа со ништо
2412
+ notes:
2413
+ secret_column: Тајна колона
2123
2414
  only_show: Прикажи само
2124
2415
  or_empty: или %{field} е празно
2416
+ problems:
2417
+ empty_association: Патеката на врски има празен чекор (две точки една по
2418
+ друга, или точка на почетокот)
2419
+ encrypted_column: "%{name} на %{model} е шифриран: базата го чува неговиот
2420
+ шифриран текст, па правилото може само да провери дали е празен"
2421
+ foreign_table_html: "%{name} е табела на друг модел: правило за филтер ги
2422
+ споредува само колоните на %{model}"
2423
+ missing_column_html: "%{name} не е колона на %{model}"
2424
+ pattern_on_non_text: "%{name} на %{model} не е текст: услов со шаблон (содржи,
2425
+ почнува со, завршува со) не може да го совпадне"
2426
+ unjoinable_association: "%{name} е врска на %{model} што правило не може
2427
+ да ја следи"
2428
+ unjoinable_class_not_loadable: "%{name} е врска на %{model} чиј модел не
2429
+ може да се вчита"
2430
+ unjoinable_invalid_definition: "%{name} е врска на %{model} чиј :through,
2431
+ :source или inverse_of именува врска што не постои"
2432
+ unjoinable_polymorphic: "%{name} е полиморфна врска на %{model}: правило
2433
+ не може да ја следи"
2434
+ unjoinable_record_dependent_scope: "%{name} е врска на %{model} чиј опсег
2435
+ зависи од записот: правило не може да ја следи"
2436
+ unknown_association_html: "%{name} не е врска на %{model}"
2437
+ unknown_join_type_html: "%{name} не е начин на спојување што оваа верзија
2438
+ го познава"
2439
+ unknown_operator_html: "%{name} не е услов што оваа верзија го познава"
2440
+ unknown_table_html: "%{name} не е табела во оваа база на податоци"
2441
+ unusable_value_html: "%{value} не е вредност што %{name} на %{model} може
2442
+ да ја содржи"
2125
2443
  where: каде
2126
2444
  rules_count:
2127
2445
  one: Правила (%{count})
2128
2446
  other: Правила (%{count})
2129
2447
  rules_tab: Правила
2130
2448
  search: Пребарај
2131
- search_people: Пребарајте по име или е-пошта
2449
+ search_people: Име или е-пошта
2132
2450
  setting: Поставка
2133
2451
  states:
2134
- blocked: Блокирано
2135
- granted: Дозволено
2136
- none: Не
2452
+ actor:
2453
+ api: API клиент
2454
+ basic_auth: Прозорец за лозинка
2455
+ system: Систем
2456
+ unknown: Непознат
2457
+ user: Лице
2458
+ effective:
2459
+ blocked: Блокирано
2460
+ granted: Дозволено
2461
+ hidden_by_muting: Скриено со пригушување
2462
+ none: Не
2463
+ field_level:
2464
+ edit: Може да се уредува
2465
+ hidden: Скриено
2466
+ hide: Скриј
2467
+ leave: Непроменето
2468
+ mask: Присилно маскирање
2469
+ masked: Маскирано
2470
+ none: Не е конфигурирано
2471
+ read: Само читање
2472
+ lock:
2473
+ locked: Заклучено
2137
2474
  unconfigured:
2138
2475
  block: Блокирано по основно
2139
2476
  mask_all: Целосно маскирано
2140
2477
  pass_through: Се прикажува немаскирано
2141
2478
  warn: Се прикажува и се запишува во дневник
2479
+ untitled:
2480
+ permission_set: Сет на дозволи без име
2481
+ permission_set_group: Група на сетови на дозволи без име
2482
+ permission_set_rule: Правило без име
2142
2483
  view_all: Прикажи ги сите
2143
2484
  validations:
2485
+ attributes:
2486
+ allowed_hours_end: Краен час
2487
+ allowed_hours_start: Почетен час
2488
+ allowed_ips: Дозволени IP адреси
2489
+ create_access: Создавање
2490
+ delete_access: Бришење
2491
+ description: Опис
2492
+ edit_access: Уредување
2493
+ expires_at: Краен датум
2494
+ failure_message: Порака при блокирање
2495
+ field_accessor_path: Релација
2496
+ field_name: Поле
2497
+ field_value: Вредност
2498
+ include_nulls: Вклучи празни вредности
2499
+ is_active: Активно
2500
+ is_editable: Уредлив
2501
+ is_muting: Пригушувачки
2502
+ is_permitted: Дозволено
2503
+ join_type: Спојување
2504
+ label: Етикета
2505
+ mask_access: Маскирање
2506
+ mask_strategy: Стратегија за маскирање
2507
+ modify_all: Измени сè
2508
+ name: Име
2509
+ operator: Услов
2510
+ permission_set_group: Permission Set Group
2511
+ read_access: Читање
2512
+ requires_session_flag: Ознака на сесија
2513
+ user_id: Лице
2514
+ uuid: UUID
2515
+ view_all: Прегледај сè
2516
+ blank: не смее да биде празно
2517
+ full_message: "%{attribute} %{message}"
2518
+ invalid: не е валидно
2144
2519
  name_blank: не смее да биде празно
2520
+ nul_byte: не смее да содржи NUL бајт
2145
2521
  permission_set:
2522
+ flag_unusable: 'не смее да содржи контролен знак (нов ред, табулатор): ниедно
2523
+ барање не може да носи таков знак'
2146
2524
  group_missing: мора да биде постоечка група на сетови на дозволи
2525
+ hours_equal: мора да се разликува од почетниот час (прозорец од еден час до
2526
+ истиот час е празен; оставете ги двата празни за без прозорец)
2527
+ hours_incomplete: мора да се постави заедно со другиот час (или двата да се
2528
+ остават празни)
2529
+ hours_range: мора да биде помеѓу 0 и 23
2530
+ invalid_ip_entry: содржи „%{entry}“, што не е IP адреса или CIDR опсег
2531
+ name_taken: веќе се користи од друг сет на дозволи
2532
+ permission_set_group_user:
2533
+ taken: е веќе член на оваа група
2147
2534
  permission_set_rule:
2148
2535
  between_requires_two_values: мора да содржи точно 2 вредности одделени со
2149
2536
  запирка за операторот between
2537
+ empty_association: има празно име на асоцијација (две точки една по друга,
2538
+ или точка на почетокот)
2539
+ encrypted_column: 'го именува %{name}, шифриран атрибут на %{model}: базата
2540
+ го чува неговиот шифриран текст, па правилото може само да провери дали
2541
+ е празен (is_null, is_not_null)'
2150
2542
  field_value_required: е потребна за овој оператор
2543
+ foreign_table: 'именува %{name}, табела што не е на %{model}: правило за филтер
2544
+ ја споредува сопствената табела. За колона од друга табела, користете правило
2545
+ за спојување (тип на спојување и патеката на релацијата)'
2151
2546
  in_requires_values: мора да содржи барем 1 вредност одделена со запирка
2152
2547
  invalid_field_name: мора да биде валидно име на колона (букви, бројки, долни
2153
2548
  црти, точки)
2154
2549
  invalid_join_type: не е валиден тип на спојување
2155
2550
  invalid_operator: не е валиден оператор
2551
+ nul_byte: не смее да содржи NUL бајт
2156
2552
  numeric_or_date_required: мора да биде нумеричка или датумска вредност за
2157
2553
  оператори за споредба
2554
+ pattern_on_non_text: 'совпаѓа само текст, а %{model}.%{name} е колона од тип
2555
+ %{type}: користете услов што споредува вредности'
2556
+ secret_column: 'именува колона што чува тајна (хеш на лозинка, токен, колона
2557
+ encrypted_*): правило за записи никогаш не споредува таква'
2558
+ unjoinable_association: го именува %{association}, асоцијација на %{model}
2559
+ што правило не може да ја спои
2560
+ unjoinable_class_not_loadable: го именува %{association}, асоцијација на %{model}
2561
+ чија класа не може да се вчита
2562
+ unjoinable_invalid_definition: го именува %{association}, асоцијација на %{model}
2563
+ чиј :through, :source или inverse_of именува асоцијација што не постои
2564
+ unjoinable_polymorphic: 'го именува %{association}, полиморфна асоцијација
2565
+ на %{model}: правило не може да ја спои'
2566
+ unjoinable_record_dependent_scope: 'го именува %{association}, асоцијација
2567
+ на %{model} чиј опсег (или еден по должината на :through) го зема записот:
2568
+ правило не може да ја спои'
2569
+ unknown_association: го именува %{association}, што не е асоцијација на %{model}
2570
+ unknown_column: го именува %{name}, што не е колона на %{model}
2571
+ unknown_table: именува %{name}, што не е табела во оваа база на податоци
2572
+ unusable_value: не е вредност што %{model}.%{name} може да ја содржи
2158
2573
  value_not_expected: не бара вредност за овој оператор
2159
2574
  value_required: не смее да биде празно за овој оператор
2575
+ permission_set_user:
2576
+ taken: веќе го има овој сет на дозволи
2577
+ requires: бара %{requires} да биде вклучено
2160
2578
  resource:
2161
2579
  invalid_name: мора да биде валидно име на класа модел (пр. Customer или Admin::Report)
2580
+ name_taken: веќе постои во овој сет на дозволи
2162
2581
  resource_field:
2163
2582
  invalid_mask_strategy: не е валидна стратегија за маскирање
2164
2583
  mask_strategy_required: мора да биде присутна кога е овозможен пристап со
2165
2584
  маска
2585
+ taken: е веќе зафатено
2166
2586
  too_long: е предолго (најмногу %{count} знаци)