MVC中的管理员和用户登录

问题描述 投票:0回答:5

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

我进行了简单的注册,但是我需要制作一个登录表单,具体取决于用户被定向到视图的角色。Registration Form

我已建立登录存储过程:

 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-mvc model-view-controller
5个回答
0
投票

我认为您可以通过具有授权的模板创建一个asp.net核心项目,并研究应该如何做。在您的情况下,可以在控制器方法中使用重定向动作,但这不是一个好习惯,无论如何,请查看this link


0
投票

您可以使用RedirectToAction()方法,然后重定向到的操作可以返回一个View。最简单的方法是:

return RedirectToAction("Index", model);

如果不需要退回模型,请清除它

return RedirectToAction("Index");

0
投票

基本上,您希望根据访问者的角色将访问者重定向到不同的页面。因此,对于该分配角色,例如“管理员”,“用户”。

之后您当时检查登录时获取角色。

var roles = "Select Role from Users where Username=@Username and Password=@Password";

if(roles == "Admin"){
//redirect to admin view
}
else{
//redirect to user view
}

0
投票

到目前为止,我可以理解您想要的是我们的MVC应用程序中基于角色的身份验证。

您将在注册用户时分配角色,当他们登录时,将根据其角色打开不同的页面。

您可以检查以下链接,同样对您有帮助。https://www.c-sharpcorner.com/UploadFile/rahul4_saxena/role-based-access-of-an-mvc-application/


0
投票

我将尝试提供一种解决方案,以保持您现有的结构并仅使用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);


    }
}

至此,您已经扮演了角色,围绕布尔(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。如果只是要加载的页面,则只需返回View

© www.soinside.com 2019 - 2024. All rights reserved.