且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在其上添加角色和成员资格?

更新时间:2023-01-08 21:51:49

,ErrorMessage = 请输入有效的电子邮件地址)]
public 虚拟 字符串电子邮件{获取; set ;}

[必需]
[DataType(DataType.Password)]
public virtual string 密码{获取; 设置;}

[必填]
[NotMapped]
[显示(Name = 确认密码)]
[比较( 密码,ErrorMessage = 密码和确认密码不匹配。)]
public string ConfirmPassword { get ; set ; }
[必需]
[显示(名称= 地址)]
public string 地址{ get ; set ; }

[必需]
[显示(名称= 国家)]
public string 国家{获得跨度>; set ; }
[必需]
[显示(名称= 城市)]
public string 城市{获取; set ; }
[必需]
[显示(名称= )]
public string 状态{获取; set ; }
[必需]
[显示(名称= Zip)]
public string Zip { get ; set ; }






// public virtual ICollection< RSVP> RSVP {get;组; }
}

public class 登录
{
[必需]
[显示(名称= 用户名)]
public string UserName { get 跨度>; set ; }

[必需]
[DataType(DataType.Password)]
public 字符串密码{获取; set ; }
}


}
", ErrorMessage = "Please enter a valid Email Address")] public virtual string Email { get; set; } [Required] [DataType(DataType.Password)] public virtual string Password { get; set; } [Required] [NotMapped] [Display(Name = "Confirm Password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword { get; set; } [Required] [Display(Name = "Address")] public string Address { get; set; } [Required] [Display(Name = "Country")] public string Country { get; set; } [Required] [Display(Name = "City")] public string City { get; set; } [Required] [Display(Name = "State")] public string State { get; set; } [Required] [Display(Name = "Zip")] public string Zip { get; set; } //public virtual ICollection<RSVP> RSVPs { get; set; } } public class Login { [Required] [Display(Name = "Username")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] public string Password { get; set; } } }




// in my conroller
<pre lang="c#">using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BootstrapPager.Models;
using Microsoft.VisualBasic;

namespace BootstrapPager.Controllers
{
    public class UserController : Controller
    {
        private EmployeeDb db = new EmployeeDb();

        //
        // GET: /User/

        public ActionResult Index()
        {
            return View(db.Users.ToList());
        }

        //
        // GET: /User/Details/5

        public ActionResult Details(int id = 0)
        {
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            return View(user);
        }

        //
        // GET: /User/Create
        
        public ActionResult Create()
        {
            //if (Session["user"] != null)
            //{
                
            //    return View();
            //}
            //else { return Content("Please Login First"); }
            return View();
        }

        //
        // POST: /User/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(User user)
        {
            if (ModelState.IsValid)
            {
                //User users = (User)db.Users.Where((a => a.Email == user.Email) || );
                //var email = from a in db.Users
                //             where a.Email == user.Email
                //             select a.Email;
                //var username = from a in db.Users
                //               where a.UserName == user.UserName
                //               select a.UserName;
               
                //if ( email.Count() == 0 && username.Count() == 0 )
                //{
                    db.Users.Add(user);
                    db.SaveChanges();
                    // return Redirect("Home/Index");
                    return RedirectToAction("Index", "Home");
            //    }
            //    else
            //    {
            //        if (email.Count() != 0)
            //            ModelState.AddModelError("Email", "Email address already exists. Try another email address.");
            //        if ( username.Count() != 0)
            //        {
            //            ModelState.AddModelError("UserName", "Username already exists. Try another username." );
            //        }
            //    }
            }

            return View(user);
        }

        public ActionResult Login()
        {
            ViewBag.login = true;
            return View();
        }

        [HttpPost]
        public ActionResult Login(Login login)
        {
            //ViewBag.login = false;
            if (ModelState.IsValid)
            {
                var user = db.Users.Where( a=>a.UserName == login.UserName && a.Password == login.Password);

                if ( user.Count() != 0 )
                {
                    User loginuser = db.Users.FirstOrDefault(a => a.UserName == login.UserName);
                    Session["login"] = "true";
                    
                    Session["username"] = login.UserName;
                    Session["userid"] = loginuser.Id; 
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ViewBag.login = false;
                }
            }
            else
            {
                ViewBag.login = true;
            }
            return View(login);
        }

        public ActionResult Logout()
        {
            Session["username"] = null;
            Session["userid"] = null; 
            Session["login"] = "false";
            return RedirectToAction("Index", "Home");
        }

        [HttpGet]
        public ActionResult UserProfile( string name )
        {
           
            User user = db.Users.FirstOrDefault( a => a.UserName == name);
            return View(user);
        }

        //
        // GET: /User/Edit/5

        public ActionResult Edit(int id = 0)
        {
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            return View(user);
        }

        //
        // POST: /User/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(User user)
        {
            if (ModelState.IsValid)
            {
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(user);
        }

        //
        // GET: /User/Delete/5

        public ActionResult Delete(int id = 0)
        {
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            return View(user);
        }

        //
        // POST: /User/Delete/5

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            User user = db.Users.Find(id);
            db.Users.Remove(user);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}


In my article Drag And Drop Role Management with Asp.Net, MVC & jQuery[^] you can see how I check the role the current user has to see if they have the authority to run the action.



During the initialisation of the system you can add the roles into the database by calling a method in the global.asax Application_Start;



Obviously you would do this on the first run just to set things up. Later on you can either comment this out or do some logic checking to see if the roles or user accounts already exist.

In my article Drag And Drop Role Management with Asp.Net, MVC & jQuery[^] you can see how I check the role the current user has to see if they have the authority to run the action.

During the initialisation of the system you can add the roles into the database by calling a method in the global.asax Application_Start;

Obviously you would do this on the first run just to set things up. Later on you can either comment this out or do some logic checking to see if the roles or user accounts already exist.
protected void Application_Start()
{

    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    //Initialise the Database
    //Database.SetInitializer(new DropCreateDatabaseAlways<TM470Project.DBContexts.DrillingDailyReportsDBContext>());
    //Database.SetInitializer(new DropCreateDatabaseAlways<TM470Project.DBContexts.KPIDailyDBContext>());


    //Initialise the user database Roles - Note:Set to true only during dev when cleaning up old roles being removed.
    InitialiseRoles(false);

    //Initialise the default SuperUser + Guest Account
    InitialiseDefaultUsers();

    //Use the new combined context for the intialiser
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<TM470Project.DBContexts.CombinedDBContext>());

}





then the two methods are



then the two methods are

private void InitialiseRoles(Boolean DeleteExistingRoles)
        {

            if (DeleteExistingRoles)
            {
                //Delete All Existing Roles
                //Get list of Roles
                String[] oldRoles = Roles.GetAllRoles();

                foreach (String role in oldRoles)
                {
                    //Get all the usernames with Role
                    String[] users = Roles.GetUsersInRole(role);

                    //Remove all the users from Role
                    foreach (String user in users)
                    {
                        Roles.RemoveUserFromRole(user, role);
                    }

                    //Delete the Role
                    Roles.DeleteRole(role);

                }
            }

            //Roles list to be used by application
            String[] NewRoles = new String[] {"KPI-Daily-View","KPI-Daily-Create", "KPI-Daily-Edit", "KPI-Daily-Delete", "KPI-Losses-View","KPI-Losses-Create","KPI-Losses-Edit","KPI-Losses-Delete", "Drilling-Report-View","Drilling-Report-Create","Drilling-Report-Edit","Drilling-Report-Delete", "Admin-User-View","Admin-User-Add","Admin-User-Edit","Admin-User-Delete","Admin-User-ChangePassword", "Admin-Assets-View","Admin-Assets-Create","Admin-Assets-Edit","Admin-Assets-Delete"};

            //Check if role exists and add if not
            foreach (String role in NewRoles)
            {
                if (!Roles.RoleExists(role))
                {
                    Roles.CreateRole(role);
                }
            }
        }





You can then add the default users onto the system by doing;



You can then add the default users onto the system by doing;

private void InitialiseDefaultUsers()
        {
            MembershipUser user = null;

            //Default SuperUser Account
           user = Membership.GetUser("SuperUser");
           if (user == null)
           {
               //Account does not exist
               Membership.CreateUser("SuperUser", "ThePassword","SuperUser@the-email.net");
           }

           //Check the SuperUser account has all roles
           String[] roles = Roles.GetAllRoles();
           foreach (String role in roles)
           {
               if (!(Roles.IsUserInRole("SuperUser", role)))
               {
                   Roles.AddUserToRole("SuperUser", role);
               }
           }

            //Default Guest Account
           user = Membership.GetUser("Guest");
           if (user==null)
           {
               //Account does not exist
               Membership.CreateUser("Guest", "guest-password", "guest@the-email.net");
           }

            //Add roles to Guest Account
            String[] guestRoles = new String[] {"KPI-Daily-View","KPI-Losses-View","Drilling-Report-View"};
            foreach (String role in guestRoles)
            {
                if (!(Roles.IsUserInRole("Guest", role)))
                {
                    Roles.AddUserToRole("Guest", role);
                }
            }

        }





Note: the code above is from my OU project that the drag and drop article was also based on, hence all those different roles for the different things the application was doing.



Note: the code above is from my OU project that the drag and drop article was also based on, hence all those different roles for the different things the application was doing.