.NETのメンバーシップを使用してロールの名前を変更するにはどうすればよいですか?
-
07-07-2019 - |
質問
ASP.NETメンバーシップを使用していますが、ロールクラスを使用して、ロール(たとえば、名前)を変更し、作成および削除のみを行います。
それは可能ですか、またはサポートされていませんか
編集:@CheGueVerra:はい、いい回避策です。
ご存知ですか(追加クレジット:))なぜそれが不可能なのですか?
解決
メンバーシッププロバイダーでロール名を直接変更する方法はありません。
名前を変更したいロールに属するユーザーのリストを取得し、リストからそれらを削除し、ロールを削除し、新しい名前でロールを作成してから、以前に見つかったユーザーをロールに追加します新しい名前。
public void RenameRoleAndUsers(string OldRoleName, string NewRoleName)
{
string[] users = Roles.GetUsersInRole(OldRoleName);
Roles.CreateRole(NewRoleName);
Roles.AddUsersToRole(users, NewRoleName);
Roles.RemoveUsersFromRole(users, OldRoleName);
Roles.DeleteRole(OldRoleName);
}
これにより、ロール内のすべてのユーザーのロール名が変更されます。
フォローアップ:ロールは、ユーザーがシステムで自分の役割だけを果たすことを保証するために使用されます。したがって、User.IsInRole(ROLE_NAME)は、ユーザーおよびユーザーが所属するロールに適用されるBR証券を施行するのに役立ちます。その場でロール名を変更できる場合、ユーザーが実際にそのロールにいることをどのように検証しますか。それは私がそれについて尋ねたとき、私が理解したことです。
rtpHarry edit:擬似コードサンプルをコンパイル可能なC#メソッドに変換しました
他のヒント
ASP.NETメンバーシップモデルでロールの名前をプログラムで変更すると、設定ファイルでアクセス許可を定義するためにロール名が使用されるため、問題が発生します。プログラムでロール名を変更する方法(データベースへの変更を永続化する方法)があった場合、データベースを使用するWebアプリのweb.configでロールベースのセキュリティ構成をすぐに壊してしまい、方法はありません単一のWebアプリがそのMembership DBを使用するすべてのWebアプリの構成を変更できることを保証します。