ASP.NETメンバーシップを使用していますが、Rolesクラスにロール(たとえばその名前)を変更するメソッドがなく、ロールを作成および削除するだけであることに気付きました。
それは可能ですか、それともサポートされていませんか?
編集:@CheGueVerra:はい、素晴らしい回避策です。
(追加のクレジットのために:))なぜそれが不可能なのか知っていますか?
ASP.NETメンバーシップを使用していますが、Rolesクラスにロール(たとえばその名前)を変更するメソッドがなく、ロールを作成および削除するだけであることに気付きました。
それは可能ですか、それともサポートされていませんか?
編集:@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 編集: 擬似コード サンプルをコンパイル可能な C# メソッドに変換
ASP.NET メンバーシップ モデルでロールの名前をプログラムで変更することは、悪いことです。なぜなら、ロール名は構成ファイルでアクセス許可を定義するために使用されるからです。ロール名を変更するプログラムによる方法 (データベースへの変更を永続化する方法) があった場合、データベースを使用する Web アプリの web.config でロールベースのセキュリティ構成をすぐに壊すことになり、方法はありません。 1 つの Web アプリが、そのメンバーシップ DB を使用してすべての Web アプリの構成を変更できることを保証します。