【问题标题】:MVC identity changing user rolesMVC 身份更改用户角色
【发布时间】:2026-02-20 07:20:12
【问题描述】:

我有一个带有单用户身份验证的 Vb.net MVC 项目。管理员可以在“经理用户”页面中查看所有用户,用户分为 3 个不同的角色,分别为 Admin、Employee 和 User。我希望管理员能够提升角色:用户到员工或员工到管理员,也可以降级。

我考虑在每个用户旁边添加一个按钮来提升或降级。我正在为每个按钮如何链接到每个用户以及如何将一个用户更改回控制器而苦苦挣扎。

谁能给点建议,谢谢

UserViewModels.vb

Public Class GroupedUserViewModel
   Public Property Users() As List(Of UserViewModel)
   Public Property Admins() As List(Of UserViewModel)
   Public Property Employee() As List(Of UserViewModel)
End Class

Public Class UserViewModel
   Public Property FullName() As String
   Public Property Email() As String
   Public Property RoleName() As String
End Class

查看: 我在视图中显示所有管理员、员工和用户角色,这里是管理员示例:

@Modeltype GroupedUserViewModel

 @If Model.Admins.Any Then
    @:<div Class="Rtable Rtable--3cols Rtable--collapse">
        @For Each Admin In Model.Admins
            @:<div Class="Rtable-cell">
            @Admin.FullName
            @:</div>
            @:<div Class="Rtable-cell">
            @Admin.Email
            @:</div>
            @:<div Class="Rtable-cell">
            @Admin.RoleName
            @:</div>
        Next Admin
   @:</div>
End If

【问题讨论】:

  • 基本上,您需要将相应的操作参数作为按钮点击发送给控制器,例如用户 ID、操作(提升、降级)。然后从相应的列表中添加删除。希望这会有所帮助!

标签: asp.net-mvc vb.net asp.net-mvc-4


【解决方案1】:

我将坚持使用主要基于 HTML 的答案,因为我的 VB 已经生锈了。随意替换适当的 HTML/URL 帮助程序或任何您想要的。

基本上,您可以采用以下两种方法之一:

  1. 每个按钮都有一个单独的表单。如果您还为每个按钮设置了单独的操作(即您的控制器上有一个 Promote 操作和一个 Demote 操作,则这是最有意义的。

    <form action="/path/to/promote/action" method="post">
        <input type="hidden" name="userId" value="1" />
        <button type="submit">Promote</button>
    </form>
    <form action="/path/to/demote/action" method="post">
        <input type="hidden" name="userId" value="1" />
        <button type="submit">Demote</button>
    </form>
    
  2. 一个带有“提升”和“降级”按钮的表单。如果您只有一个操作可以同时处理这两个过程,这显然更有意义。

    <form action="/path/to/role/change/action" method="post">
        <input type="hidden" name="userId" value="1" />
        <button type="submit" name="promote">Promote</button>
        <button type="submit" name="demote">Demote</button>
    </form>
    

    然后,由于只有被点击的按钮才会包含在帖子数据中,您可以相应地在您的操作中进行分支:

    If Request.Form["promote"] IsNot Nothing Then
        'promote user
    ElseIf Request.Form["demote"] IsNot Nothing Then
        'demote user
    EndIf
    

您也可以更高级并使用 AJAX 来处理此问题,但这应该足以让您继续前进。

【讨论】:

    最近更新 更多