管理者ロール設定機能追加
次に、ユーザーに管理者ロールを付与できるようにしていきましょう。まずは、ユーザー管理用のGridViewコントロールに、管理者かどうか設定するためのチェックボックス列を追加します(リスト5)。
<asp:GridView ...(略)...>
<Columns>
...(略)...
<asp:TemplateField HeaderText="管理者" ItemStyle-Width="50">
<ItemTemplate>
<asp:CheckBox ID="IsAdmin" runat="server" Enabled="false" />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="IsAdmin" runat="server" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
追加したチェックボックスのチェックの有無により、管理者ロールの設定、解除を行うよう、更新処理を変更します(リスト6)。
/// <summary>
/// ユーザー情報を更新します。
/// </summary>
/// <param name="user">画面で選択したユーザー情報。</param>
public void UpdateUser(ApplicationUser user)
{
...(略)...
// 管理者ロールを更新
var IsAdmin = UserGridView.Rows[UserGridView.EditIndex].FindControl("IsAdmin") as CheckBox;
if (IsAdmin.Checked)
{
//(1)管理者ロールに追加
result = manager.AddToRole(user.Id, "Administrator");
}
else
{
//(2)管理者ロールから削除
result = manager.RemoveFromRole(user.Id, "Administrator");
}
if (result.Succeeded == false)
{
var error = result.Errors.FirstOrDefault();
ErrorMessage.Text = error;
ModelState.AddModelError("error", error);
return;
}
}
ロールの設定、解除はユーザーをロールに追加、削除することで行います。
(1) 管理者ロールに追加
管理者チェックボックスがチェックされていたら、ApplicationUserManagerクラスのAddToRole拡張メソッドに、ユーザーのIDとロール名を指定して呼び出します。
(2)管理者ロールから削除
管理者チェックボックスがチェックされていなかったら、ApplicationUserManagerクラスのRemoveFromRomeメソッドに、おなじくユーザーのIDとロール名を指定して呼び出します。
これでユーザーを管理者にすることができるようになりました。この段階で一度アプリケーションを起動し、管理者としたいユーザーでログイン後にユーザー管理画面で自分を管理者にしておきましょう。次のステップで管理者のみユーザー管理を行えるようにすると、管理者ユーザーがいなければ一切変更ができなくなってしまうためです。
