コントローラーか制約か--権限を強制する最良の方法?

ユーザーが特定のアクションを実行できるかを確認するガーディアンメソッドが必要だと思います。例えば、can_upgrade_server? などです。

また、それを実装すれば、条件を確認して例外を発生させる guardian.ensure_can_upgrade_server! メソッドを使用できます。これはまさにあなたが求めているものだと思います。