public ActionResult Add()
        {
            //if (!WebSecurity.IsAuthenticated && !Roles.IsUserInRole("SuperAdmin"))
            if(!CommonUtility.CheckUserLogin())
            {
                RedirectToAction("Login");
            }
               UserModel usermodel = new UserModel();

               IntializeRolesInModel(usermodel);

               return View(usermodel);
        }
        public ActionResult Add(UserModel usermodel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    if (!WebSecurity.UserExists(usermodel.user.UserName))
                    {
                        WebSecurity.CreateUserAndAccount(usermodel.user.UserName, usermodel.Password,
                        propertyValues: new
                        {
                            FirstName = usermodel.user.FirstName,
                            LastName = usermodel.user.LastName,
                            MobileNumber = usermodel.user.MobileNumber,
                            IsActive = usermodel.user.IsActive,
                            CreateDate = DateTime.Now
                        }
                        );

                        if (usermodel.RoleNames != null && usermodel.RoleNames.Length > 0)
                        {
                            foreach (string rolename in usermodel.RoleNames)
                            {
                                Roles.AddUserToRole(usermodel.user.UserName, rolename);
                            }
                        }
                        usermodel.message = "User have been created Successfully.";
                        return RedirectToAction("List");
                    }
                    else
                    {
                        usermodel.message = "User is already exists. Please try to create with different user.";
                        IntializeRolesInModel(usermodel);
                        return View(usermodel);
                    }
                }
                catch (Exception ex)
                {

                    usermodel.message = "User have not been create Successfully.";
                    IntializeRolesInModel(usermodel);
                    return View(usermodel);
                }

            }
            else
            {
                IntializeRolesInModel(usermodel);
                return View(usermodel);
            }
        }
        private static void IntializeRolesInModel(UserModel usermodel)
        {
            IList<RoleModel> lstRoleModel = new List<RoleModel>();
            IList<RoleModel> lstSelRoleModel = new List<RoleModel>();
            foreach (string rolename in Roles.GetAllRoles())
            {
                lstRoleModel.Add(new RoleModel(rolename, false));
            }
            usermodel.AvailableRoles = lstRoleModel;

            if (usermodel.RoleNames != null && usermodel.RoleNames.Length > 0)
            {
                foreach (string selRoleName in usermodel.RoleNames)
                {
                    lstSelRoleModel.Add(new RoleModel(selRoleName, true));
                }
                usermodel.SelectedRoles = lstSelRoleModel;
            }
            else
            {
                usermodel.SelectedRoles = new List<RoleModel>();
                usermodel.RoleNames = new string[0];
            }
        }
        public ActionResult Edit(UserModel usermodel)
        {
            if (ModelState.IsValid)
            {
                try
                {

                    var existuser = (User)(from user in db.Users
                                           where
                                               user.UserName == usermodel.user.UserName && user.UserId != usermodel.user.UserId
                                           select user).FirstOrDefault();

                    if (existuser == null)
                    {

                        usermodel.user.UpdateDate = DateTime.Now;
                        db.Entry(usermodel.user).State = EntityState.Modified;
                        db.SaveChanges();

                        string[] existingRoles = Roles.GetRolesForUser(usermodel.user.UserName);

                        var deletedRoles = (from existRole in existingRoles
                                            where !(usermodel.RoleNames!=null && usermodel.RoleNames.Contains(existRole))
                                            select existRole).ToList();

                        foreach (string deleteRole in deletedRoles)
                        {
                            Roles.RemoveUserFromRole(usermodel.user.UserName, deleteRole);
                        }

                        if (usermodel.RoleNames != null && usermodel.RoleNames.Length > 0)
                        {
                            foreach (string rolename in usermodel.RoleNames)
                            {
                                if (!Roles.IsUserInRole(usermodel.user.UserName, rolename))
                                {
                                    Roles.AddUserToRole(usermodel.user.UserName, rolename);
                                }
                            }
                        }

                        usermodel.message = "User have been modified Successfully.";
                        return RedirectToAction("List");
                    }
                    else
                    {
                        usermodel.message = "User is already exists. Please try to update with different user.";
                        IntializeRolesInModel(usermodel);
                        return View(usermodel);
                    }
                }
                catch (Exception ex)
                {
                    usermodel.message = "User have not been modified Successfully.";
                    IntializeRolesInModel(usermodel);
                    return View(usermodel);
                }
            }
            else
            {
                IntializeRolesInModel(usermodel);
                return View(usermodel);
            }
        }
        public ActionResult Edit(int id = 0)
        {
            //if (!WebSecurity.IsAuthenticated && !Roles.IsUserInRole("SuperAdmin"))
            if (!CommonUtility.CheckUserLogin())
            {
                RedirectToAction("Login");
            }

            UserModel userModel = new UserModel();
            userModel.Password = "******";
            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            userModel.user = user;

            if (CommonUtility.IsUserEditPermission(user.UserName))
            {
                RedirectToAction("List");
            }

            IList<RoleModel> lstRoleModel = new List<RoleModel>();
            IList<RoleModel> lstSelRoleModel = new List<RoleModel>();
            foreach (string rolename in Roles.GetAllRoles())
            {
                lstRoleModel.Add(new RoleModel(rolename, false));
            }
            userModel.AvailableRoles = lstRoleModel;
            foreach (string selRoleName in Roles.GetRolesForUser(user.UserName))
            {
                lstSelRoleModel.Add(new RoleModel(selRoleName, true));
            }
            userModel.SelectedRoles = lstSelRoleModel;
            userModel.RoleNames = Roles.GetRolesForUser(user.UserName);
            return View(userModel);
        }
        public ActionResult Detail(int id = 0)
        {
            //if (!WebSecurity.IsAuthenticated && !Roles.IsUserInRole("SuperAdmin"))
            if (!CommonUtility.CheckUserLogin())
            {
                RedirectToAction("Login");
            }
            UserModel userModel = new UserModel();

            User user = db.Users.Find(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            userModel.user = user;

            IList<RoleModel> lstSelRoleModel = new List<RoleModel>();
            foreach (string selRoleName in Roles.GetRolesForUser(user.UserName))
            {
                lstSelRoleModel.Add(new RoleModel(selRoleName, true));
            }
            userModel.SelectedRoles = lstSelRoleModel;

            return View(userModel);
        }