管理者ロール設定機能追加
次に、ユーザーに管理者ロールを付与できるようにしていきましょう。まずは、ユーザー管理用の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とロール名を指定して呼び出します。
これでユーザーを管理者にすることができるようになりました。この段階で一度アプリケーションを起動し、管理者としたいユーザーでログイン後にユーザー管理画面で自分を管理者にしておきましょう。次のステップで管理者のみユーザー管理を行えるようにすると、管理者ユーザーがいなければ一切変更ができなくなってしまうためです。