最初の質問に対する回答として、ユーザーが特定のアクセス許可ではなくロールを持っていることを確認する際の最大の問題は、アクセス許可が複数のロールによって保持されることです。この例として、開発者は会社のイントラネット上の開発者ポータルを表示するためのアクセス権を持っている場合がありますが、これはおそらくマネージャーによって保持されている許可です。ユーザーが開発者ポータルにアクセスしようとすると、次のようなチェックが行われます。
if(SecurityUtils.hasRole(developer)) {
// Grant them access to a feature
} else if(SecurityUtils.hasRole(manager)) {
// Grant them access to a feature
} else if...
(switch
あなたの選択した言語での声明は良いでしょうが、それでもまだ特に整頓されていません)
権限がより一般的または広く保持されているほど、誰かが特定のシステムにアクセスできることを確認するために確認する必要があるユーザーロールが増えます。これは、ロールのアクセス許可を変更するたびに、これを反映するようにチェックを変更する必要があるという問題にもつながります。大規模なシステムでは、これはすぐに非常に扱いにくくなります。
たとえば、ユーザーが開発者ポータルへのアクセスを許可するアクセス許可を持っていることを確認するだけであれば、ユーザーがどのロールを保持しているかに関係なく、アクセスが許可されます。
2番目の質問に答えるために、あなたが役割を持っている理由は、権限の「パッケージ」を簡単に変更および配布できるためです。数百のロールと数千の権限を持つシステムを使用している場合、新しいユーザー(たとえば、新しいHRマネージャー)を追加するには、他のHRマネージャーが保持しているすべての権限を通過する必要があります。これは退屈なだけでなく、手動で行うと間違いが発生しやすくなります。これを単に「HRマネージャー」ロールをユーザーのプロファイルに追加すると、そのロールを持つ他のすべてのユーザーと同じアクセス権が付与されます。
単に既存のユーザーのクローンを作成できると主張することができます(システムがこれをサポートしている場合)が、これはその時点でユーザーに正しい権限を付与しますが、将来すべてのユーザーの権限を追加または削除しようとすると難しい。このシナリオの例としては、過去に人事スタッフも給与を担当していたが、後に会社が給与を処理するためにスタッフを雇用できるほど大きくなった場合が考えられます。これは、人事部門が給与システムにアクセスする必要がなくなり、許可を削除できることを意味します。HRのメンバーが10人いる場合は、手動で確認し、ユーザーエラーが発生する可能性のある正しい権限を削除する必要があります。これに関する他の問題は、単にスケールしないことです。特定の役割でより多くのユーザーを獲得すると、役割の変更がはるかに困難になります。これをロールの使用と比較してください。ロールを使用すると、問題の包括的なロールを変更するだけで、そのロールを保持するすべてのユーザーに反映されるアクセス許可を削除できます。