cancancanのgemを用いて権限管理を前提としたサービスを開発しております。

仮に以下のロールがあったとします。

admin_user
hoge_user
piyo_user

これらのユーザーで

admin_userはすべての情報を知ることができ、
それ以外のユーザーはcurrent_userに関連する情報のみ見ることができる

といった機能を開発したいです。

こういう場合に
私の理解では、Controllerにその処理を書くには


if current_user.admin?
  Article.all
else
  current_user.articles
end

といった処理になるかと思います。

これはこれでいいのかもしれませんが、
今回、権限毎で処理を変えたいControllerが多数あり、
if文を量産してしまうことになります。

そのため、
cancancanやその他gemなどを用いて、
そこの処理を完結にまとめられないかなと考えております。

cancancanのAbilityクラスなどはまさにそういったことができるのかなと思ったのですが、

あくまで

can
cannot

の振り分けしかできないのかなというのが私の理解です。

皆さんならこういう用件に対して、どのようにアプローチするのでしょうか?

よろしくお願いします。