TL;DR Web applicationを書いてると,たいてい業務ロジック実装のための分岐処理でコードが汚くなり,また色々な場所に同様な処理のコピペが発生する 権限管理用ライブラリであるPunditを使って業務ロジックにおける分岐処理を1箇所にまとめるときれいに整理できるケースがある 複雑なUser Roleベースの権限管理をするときはcancancanなどを使うべきで,目的に応じた使い分けが大事 書いていないこと Punditの詳しい使い方(コードベースが非常にシンプルでdocも充実しているので自分で読んだ方が早い) 他の権限管理ライブラリの使い方(筆者より優秀なエンジニアが書いた記事が沢山あるのでググった方がいい) 前置き Web applicationがある程度大きくなった時に生じる2大問題 ビジネスロジックの条件分岐でコードが汚れる問題 以下のようなビジネスロジックを実装するため
![Punditから考えるDRYな権限管理の設計方針 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/1c79ee242d789493b1f53670a0c57dc5337cc51f/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UHVuZGl0JUUzJTgxJThCJUUzJTgyJTg5JUU4JTgwJTgzJUUzJTgxJTg4JUUzJTgyJThCRFJZJUUzJTgxJUFBJUU2JUE4JUE5JUU5JTk5JTkwJUU3JUFFJUExJUU3JTkwJTg2JUUzJTgxJUFFJUU4JUE4JUFEJUU4JUE4JTg4JUU2JTk2JUI5JUU5JTg3JTlEJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz01ODdkNzI4OWE4NTkwYjBlZDQ4OGQ0Y2UyOThhYTljMQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBzZXJpX2smdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWRmOWJhYjNjZGI3YWFmN2VhMGQ2NmE4NTI3YjU3ODYx%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D57c5a46916e5cd05aa16bb9f434a5d95)