View Source
Working with Ash.can?
Using Ash.can?/3
won't return false
if a given state machine transition is invalid. This is because Ash.can?/3
is only concerned with policies, not changes/validations. However, many folks use Ash.can?/3
in their UI to determine whether a given button/form/etc should be shown. To help with this you can add the following to your resource:
policies do
policy always() do
authorize_if AshStateMachine.Checks.ValidNextState
end
end
This check is only used in pre_flight authorization checks (i.e calling Ash.can?/3
), but it will return true
in all cases when running real authorization checks. This is because the change is validated when you use the transition_state/1
change and AshStateMachine.transition_state/2
, and so you would be doing extra work for no reason.