aaced70b8e
Integrate AssignDefaultRole change into user creation actions
2026-01-27 10:23:23 +01:00
4ec90770a4
Add AssignDefaultRole change for automatic role assignment
...
- Assigns 'Mitglied' role to new users if no role is set
2026-01-27 10:23:23 +01:00
d320cdf14e
Fix HasPermission check to handle nil member_id gracefully
2026-01-27 10:23:22 +01:00
e30be4c228
Add Role helper function and create_role_with_system_flag action
...
- Add get_mitglied_role/0 helper to avoid code duplication
- Add create_role_with_system_flag action for seeds/migrations
- Allows setting is_system_role flag (required for 'Mitglied' role)
2026-01-27 10:23:22 +01:00
a7e6136648
Add migration to assign 'Mitglied' role to existing users
2026-01-27 10:23:22 +01:00
f426e853de
Remove unused allow_no_actor_bypass config option
2026-01-27 10:23:21 +01:00
ee50f312ee
Remove NoActor module, improve Member validation, update docs
2026-01-27 10:23:21 +01:00
da0b045771
Fix missing actor parameters and restore AshAuthentication bypass tests
2026-01-27 10:23:20 +01:00
31699b7c90
Fix rebase conflict: Add actor parameter to helper functions in index_test.exs
2026-01-27 10:23:20 +01:00
2d7461e36f
Use admin_user instead of system_actor in LiveView tests
2026-01-27 10:23:19 +01:00
d807577822
Fix test db connections: increase pool size and timeout
2026-01-27 10:23:19 +01:00
aedd29c118
Fix tests: Remove redundant system_actor and update test descriptions
2026-01-27 10:23:18 +01:00
0e6b464e0a
Fix tests: Add missing actor parameters to Ash operations
2026-01-27 10:23:18 +01:00
f993c64c42
Fix test helpers: Use actor parameter correctly
2026-01-27 10:23:18 +01:00
875abc693b
Fix tests: Remove duplicate actor keyword arguments
2026-01-27 10:23:17 +01:00
ba5c982368
Use authorize?: false for integrity checks in validations
2026-01-27 10:23:17 +01:00
b387897adb
Update documentation: Remove NoActor bypass references
2026-01-27 10:23:17 +01:00
c715a45277
Add actor parameter to all tests requiring authorization
...
This commit adds actor: system_actor to all Ash operations in tests that
require authorization.
2026-01-27 10:23:16 +01:00
0cedbe52f9
Add authorize?: false to SystemActor bootstrap operations
...
- Role lookup and creation (find_admin_role, create_admin_role)
- System user creation and role assignment
- Role loading during initialization
2026-01-27 10:23:16 +01:00
73dc05c6d4
Remove NoActor bypass from User and Member policies
...
This removes the NoActor bypass that was masking authorization bugs in tests.
All operations now require an explicit actor for authorization.
2026-01-27 10:23:15 +01:00
36edee6fcc
Fix: Ensure members are loaded in handle_params when signature unchanged
2026-01-27 10:23:15 +01:00
8f7f0de822
docs: add authorization bootstrap patterns section
...
Document the three authorization bypass mechanisms and when to use each:
- NoActor (test-only bypass)
- system_actor (systemic operations)
- authorize?: false (bootstrap scenarios)
2026-01-27 10:23:14 +01:00
21d8d65492
Fix OIDC account linking by using SystemActor in LinkOidcAccountLive
...
- Add SystemActor to all Ash operations in LinkOidcAccountLive
- Enables user lookup, reload, and oidc_id linking during OIDC flow
- User is not yet logged in during linking, so SystemActor provides authorization
2026-01-27 10:23:14 +01:00
fe07a4e955
Fix OIDC login by using SystemActor in OidcEmailCollision validation
...
- Add SystemActor to Ash.read_one() calls in OidcEmailCollision validation
- Prevents authorization failures during OIDC registration when no actor is logged in
- Enables proper email collision detection and account linking flow
2026-01-27 10:23:14 +01:00
3051ac9e38
Fix authorization bypass in seeds and validations
...
- Add authorize?: false to all bootstrap operations in seeds.exs
- Fix user-linking validation to respect authorize? context flag
- Prevents authorization errors during initial setup when no actor exists yet
2026-01-27 10:23:13 +01:00
ef4df57a6f
Restrict Actor.ensure_loaded to Mv.Accounts.User only
...
Pattern match on %Mv.Accounts.User{} instead of generic actor.
Clearer intention, prevents accidental authorization bypasses.
Non-User actors are returned as-is (no-op).
2026-01-27 10:23:13 +01:00
726f164b28
Fix remaining runtime guard references in CODE_GUIDELINES
...
Remove mentions of runtime guards - only compile-time config is used.
Clarify that production safety comes from config defaults.
2026-01-27 10:23:12 +01:00
921cc22c09
Update CODE_GUIDELINES for Application.compile_env pattern
...
Replace Mix.env example with config-based approach.
Remove outdated runtime guard documentation.
2026-01-27 10:23:12 +01:00
e6b22cff16
Remove skipped get_by_subject test, add explanation
...
Test removed - JWT flow tested via AshAuthentication integration.
Direct test would require JWT mocking without value.
2026-01-27 10:23:11 +01:00
3d753c5460
Add authorize?: false to Actor.ensure_loaded
...
SECURITY: Skip authorization for role loading to avoid circular dependency.
Actor loads their OWN role, needed for authorization itself.
Documented why this is safe.
2026-01-27 10:23:11 +01:00
69836978be
Remove unused PolicyHelpers macro and PolicyConsistency test
...
Dead code - macro was never used in codebase.
PolicyConsistency test will be replaced with better implementation.
2026-01-27 10:23:10 +01:00
213521ecf6
Add centralized Actor.ensure_loaded helper
...
Consolidate role loading logic from HasPermission and LiveHelpers.
Use Ash.Resource.Info.resource? for reliable Ash detection.
2026-01-27 10:23:10 +01:00
ab0407abb1
Replace NoActor runtime Mix.env with compile-time config
...
Use Application.compile_env for release-safety.
Config only set in test.exs (defaults to false).
2026-01-27 10:23:09 +01:00
370e5af568
Update documentation for User credentials strategy
...
Clarify that User.update :own is handled by HasPermission.
Fix file path references from lib/mv/accounts to lib/accounts.
2026-01-27 10:23:09 +01:00
d0c1996d6e
Add policy consistency tests
...
Enforce User.update :own across all permission sets.
Verify READ bypass + UPDATE HasPermission pattern.
2026-01-27 10:23:09 +01:00
0d2c8e0905
Add PolicyHelpers macro for standard user policies
...
Encapsulate two-tier policy pattern (bypass + HasPermission).
Promote consistency across resource policy definitions.
2026-01-27 10:23:08 +01:00
28526deb9c
Replace for comprehension with explicit describe blocks
...
Fix Credo parsing error by removing for comprehension.
Duplicate tests for own_data, read_only, normal_user sets.
2026-01-27 10:23:08 +01:00
3852c93ac9
Centralize role preloading in global LiveView on_mount
...
Add ensure_user_role_loaded to global live_view quote block.
Remove redundant on_mount calls from individual LiveViews.
2026-01-27 10:23:08 +01:00
fb5f4990b8
Shorten User policy comments to state what only
...
Move why explanations to documentation files.
Keep policy comments concise and focused.
2026-01-27 10:23:07 +01:00
87e7310cea
Clarify User.update :own in permission sets
...
Add explicit comments explaining why all permission sets
grant User.update with scope :own for password changes.
2026-01-27 10:23:07 +01:00
7eb7149e18
Add role loading fallback to HasPermission check
...
Extract ash_resource? helper to reduce nesting depth.
Add ensure_role_loaded fallback for unloaded actor roles.
2026-01-27 10:23:07 +01:00
298a13c2e4
Harden NoActor check with runtime environment guard
...
Add Mix.env() check to match?/3 for defense in depth.
Document NoActor pattern in CODE_GUIDELINES.md.
2026-01-27 10:23:06 +01:00
cbc85f8bb8
docs(auth): document User policies and bypass pattern
...
Add bypass vs HasPermission pattern documentation
Update architecture and implementation plan docs
2026-01-27 10:23:06 +01:00
3ad0db0b2f
test(auth): add User policies test suite
...
31 tests covering all 4 permission sets and bypass scenarios
Update HasPermission tests to expect false for scope :own without record
2026-01-27 10:23:06 +01:00
de187190e4
feat(auth): add User resource authorization policies
...
Implement bypass for READ + HasPermission for UPDATE pattern
Extend HasPermission check to support User resource scope :own
2026-01-27 10:23:05 +01:00
d9f5579350
Move require Logger to module level
...
Move require Logger statements from function/case level to module level
for better code organization and consistency with Elixir best practices
2026-01-27 10:23:05 +01:00
d893c0680a
Update gettext translations for new UI strings
2026-01-27 10:23:05 +01:00
214b84b9b3
Add admin authorization check for regenerate cycles button
...
Restrict UI access to cycle regeneration to administrators only
to prevent policy bypass via user interface
2026-01-27 10:14:06 +01:00
15bf76ab25
Make system actor email configurable via SYSTEM_ACTOR_EMAIL
...
Allow system user email to be configured via environment variable
with fallback to default 'system@mila.local'
2026-01-27 10:14:06 +01:00
ce292b431c
Add logging for fail-open email uniqueness validations
...
Log warnings when query errors occur in email uniqueness checks
to improve visibility of data integrity issues
2026-01-27 10:14:05 +01:00