簡體   English   中英

MVC中的管理員和用戶登錄

[英]Admin and user Login in 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;


        }
    }

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

我將嘗試提供一個解決方案,保留您現有的結構並僅使用 1 個 DB 調用。

好的,首先,更改您的登錄程序以返回 UserRole 而不是計數(計數在登錄的情況下確實沒有用處)。 所以像這樣:

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 如果它只是要加載的頁面,則可以返回View

我認為您可以從具有授權的模板創建一個 asp.net 核心項目並調查它應該如何完成。 在您的情況下,您可以在控制器方法中使用重定向操作,但這不是一個很好的做法,無論如何請查看此鏈接

您可以使用RedirectToAction()方法,然后您重定向到的操作可以返回一個視圖。 最簡單的方法是:

return RedirectToAction("Index", model);

如果您不需要返回模型,請清除它

return RedirectToAction("Index");

基本上你想根據他們的角色將訪問者重定向到不同的頁面。 所以對於像“管理員”、“用戶”這樣的分配角色。

之后,當您檢查登錄時獲取角色。

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

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

就 AI 而言,您想要的是我們 MVC 應用程序中基於角色的身份驗證。

您將在注冊用戶時分配角色,當他們登錄時,您將根據其角色打開不同的頁面。

您可以查看以下鏈接以獲取相同信息,這將對您有所幫助。 https://www.c-sharpcorner.com/UploadFile/rahul4_saxena/role-based-access-of-an-mvc-application/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM