ASP。 NET MVC 5:如果用户是管理员,则返回所有用户的列表

Posted

技术标签:

【中文标题】ASP。 NET MVC 5:如果用户是管理员,则返回所有用户的列表【英文标题】:ASP. NET MVC 5: If user is admin, return the list of all the users 【发布时间】:2021-04-24 23:35:37 【问题描述】:

我在 ASP.NET MVC 5 中创建了登录和注册页面。注册页面上有一个角色选项,询问用户是管理员还是非管理员

现在,如果尝试登录的用户是 admin,那么我必须显示数据库中存在的所有用户,但如果用户是 >non-admin 那么我必须在页面上显示“Hi!用户名”

我在下面附上了我的 AccountController 的代码。

using MyFirstApp.DBModel;
using MyFirstApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyFirstApp.Controllers

    public class AccountController : Controller
    
        DEV_Training_DemoEntities objDEV_Training_DemoEntities = new DEV_Training_DemoEntities();
        // GET: Account 
        public ActionResult Index()
        
            return View();
        

        public ActionResult Register()
        
            UserModel objUserModel = new UserModel();
            return View(objUserModel);
        

        [HttpPost]
        public ActionResult Register(UserModel objUserModel)
        
            if(ModelState.IsValid)
            
                if (!objDEV_Training_DemoEntities.AN_Users.Any(m => m.Username == objUserModel.Username))
                 
                    AN_Users objUser = new AN_Users();
                    objUser.Name = objUserModel.Name;
                    objUser.DOB = objUserModel.DOB;
                    objUser.Username = objUserModel.Username;
                    objUser.Password = objUserModel.Password;
                    objUser.Gender = objUserModel.Gender;
                    objUser.Role = objUserModel.Role;
                    objDEV_Training_DemoEntities.AN_Users.Add(objUser);
                    objDEV_Training_DemoEntities.SaveChanges();
                    objUserModel.SucessMessage = "You are successfully registered!";
                    return RedirectToAction("Index", "Home");
                

                else
                
                    ModelState.AddModelError("Error", "Username already exists!");
                    return View();
                
            

            return View();
        

        public ActionResult Login()
        
            LoginModel objLoginModel = new LoginModel();
            return View(objLoginModel);
        

        [HttpPost]
        public ActionResult Login(LoginModel objLoginModel)
        
            if(ModelState.IsValid)
            
                if (objDEV_Training_DemoEntities.AN_Users.Where(m => m.Username == objLoginModel.Username && m.Password == objLoginModel.Password).FirstOrDefault() == null)
                
                    ModelState.AddModelError("Error", "Invalid Email-ID or Password!");
                    return View();
                
                else
                
                    var curruser = objDEV_Training_DemoEntities.AN_Users.Where(m => m.Username == objLoginModel.Username && m.Password == objLoginModel.Password).FirstOrDefault();
                    if(curruser.Role)
                    Session["Username"] = objLoginModel.Username;
                    return RedirectToAction("Index", "Home");
                
            
            return View();
        

        public ActionResult Logout()
        
            Session.Abandon();
            return RedirectToAction("Index", "Home");
        
    

【问题讨论】:

有什么问题?你能显示错误吗? 没有错误,就是不知道怎么执行。 @Abhishek Negi,有更新吗?请检查我的答案是否适合您。 【参考方案1】:

当用户为admin时,可以尝试以下方法返回用户列表。

cshtml:

@using WebApplication2.Models
@model Users
@
    ViewBag.Title = "Index";



<h2>Index</h2>
@using (Html.BeginForm("Index", "Account", FormMethod.Post))

    <span>Enter Your Name:</span> @Html.TextBoxFor(m => m.Name)
    <br />
    <span>Enter Your Age: </span> @Html.DropDownListFor(m => m.role,
new SelectList(Enum.GetValues(typeof(Role))),
"Select Role")
    <br />

    <input id="Submit" type="submit" value="submit" />

    <hr />

    <strong>UserName: </strong> @Html.DisplayFor(m => m.Name)
    <br />
    <strong>Role: </strong> @Html.DisplayFor(m => m.role)
    <br />

    <b style="color:red">Userlist: @ViewBag.Message</b>


用户:

 public class Users
    
        public string Name  get; set; 

        public Role role  get; set; 
    



    public enum Role
     
        Admin=1,
        NonAdmin=2
    
    

控制器:

public class AccountController : Controller
    


        public ActionResult Index()
        
            return View();
        

        [HttpPost]
        public ActionResult Index(Users um)
        
            if(um.role==Role.Admin)
            
                var list = GetUserlist();
                foreach (var item in list)
                
                    ViewBag.Message += item.Name + " | ";
                
            
            else
            
                string str = string.Format("Hi! 0 of the User",um.Name);
                Response.Write("<script language=javascript>alert('" + str + "');</script>");


            
            return View(um);
        


        public List<Users> GetUserlist()
        
            List<Users> users = new List<Users>();
           // here is you get data from database
            return users;

        

    

结果:

【讨论】:

【参考方案2】:

if 语句 if user==admin then foreach var user in userlist cw(username) else cw(用户名)

【讨论】:

我知道这一点,但我不知道如何编码,因为这是我的第一个项目。那你能帮我写代码吗?

以上是关于ASP。 NET MVC 5:如果用户是管理员,则返回所有用户的列表的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 通信(请求)管道

ASP.NET MVC下判断用户登录和授权的方法

asp.net core 5 mvc 超级管理员连接

asp.net mvc5 如何控制没有权限的页面不显示

如何在 ASP.NET Core 5 MVC (.NET 5) 中获取记录的用户数据?

ASP .NET 5 MVC 6 Identity 3 Roles Claims Groups [关闭]