首页 > 解决方案 > MVC 中的管理员和用户登录

问题描述

我想允许用户和登录都通过一个视图,但是当用户登录时,他应该被定向到另一个视图,而当用户登录时,他应该被定向到另一个视图。这是我的数据库: 数据库

我进行了简单的注册,但我需要制作一个登录表单,根据用户被引导到视图的角色。 报名表格

我做了一个登录存储过程:

 Create  procedure [dbo].[Login]  
(
@Username nvarchar (20),
@Password nvarchar (20)
)
as
Begin
Select COUNT(*)from Users where Username=@Username and Password=@Password
End

和 Login.cs 类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace WebApplication19.Models
{
    public class Login
    {
        [Required(ErrorMessage = "Required.")]
        public string Username { get; set; }

        [Required(ErrorMessage = "Required.")]
        public string Password { get; set; }
    }
}

和一个 ValidateUser 函数

 public bool Validate_User(Login lmodel)
        {

            connection();

            SqlCommand cmd = new SqlCommand("Login");

                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@Username", lmodel.Username);
                    cmd.Parameters.AddWithValue("@Password", lmodel.Password);
                    cmd.Connection = con;
                    con.Open();
                    int i = cmd.ExecuteNonQuery();
                    con.Close();

                    if (i >= 1)
                        return true;
                    else
                        return false;


        }
    }

我不明白如何在我的代码中使用角色。

标签: c#asp.net-mvcmodel-view-controller

解决方案


我将尝试提供一种解决方案,保留您现有的结构并仅使用 1 个 DB 调用。

好的,首先,更改您的登录过程以返回 UserRole 而不是 count (在登录的情况下,count 确实没有用处)。所以是这样的:

Create  procedure [dbo].[Login]  
(
@Username nvarchar (20),
@Password nvarchar (20)
)
as
Begin
    Select Role from Users where Username=@Username and Password=@Password
End

接下来,您需要将您的Validate_User功能...修改为如下内容:

public bool Validate_User(Login lmodel, out string userRole)
    {
        connection();

        SqlCommand cmd = new SqlCommand("Login");

                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Username", lmodel.Username);
                cmd.Parameters.AddWithValue("@Password", lmodel.Password);
                cmd.Connection = con;
                con.Open();
                userRole = cmd.ExecuteNonQuery();
                con.Close();

                return !String.IsNullOrEmpty(userRole);


    }
}

至此,您现在有了自己的角色,并且围绕 bool (userIsValid) 的逻辑应该仍然是一致的。您现在只需要调用 Validate_User 并检索用户的角色。这应该看起来像这样:

string role = string.empty;

if (Validate_User(loginModel, out role))
{
    if (role == "Admin")
    {
        return View("AdminView");
    }
    else
    {
        return View("UserView");
    }
}
else
{
    //handle failed login
}

希望这对您有所帮助,没有对此进行测试,但它应该可以正常工作。

请记住,RedirectToAction如果有更多需要运行的逻辑或需要返回特定于视图的数据,您将需要执行此操作。如果只是要加载的页面,则只需 return View.


推荐阅读