Esempio n. 1
0
        /// <summary>
        /// 權限群組管理 - 新增
        /// </summary>
        /// <returns></returns>
        public ActionResult Create()
        {
            CreateOrEditRoleViewModel viewModel = new CreateOrEditRoleViewModel {
            };

            viewModel.AllMenu = Menu.GetSubMenu();

            return(View("_Create", viewModel));
        }
Esempio n. 2
0
        public async Task <ActionResult> CreateOrEditRole(int?id)
        {
            var role = await _roleAppService.GetRoleForEdit(new NullableIdDto <int> {
                Id = id
            });

            var viewModel = new CreateOrEditRoleViewModel(role);

            return(View("_CreateOrEditModal", viewModel));
        }
Esempio n. 3
0
        public async Task <IActionResult> Create(CreateOrEditRoleViewModel model)
        {
            if (ModelState.IsValid)
            {
                var role = Mapper.Map <Role>(model);
                await _roleManager.CreateAsync(role);

                Notifier.Success("你已成功创建一条角色记录。");
                return(RedirectToAction(nameof(List)));
            }
            return(View(model));
        }
Esempio n. 4
0
        public async Task <IActionResult> Edit(CreateOrEditRoleViewModel model)
        {
            var role = await _roleManager.FindByIdAsync(model.Id.ToString());

            if (role == null)
            {
                return(NotFound(model.Id));
            }
            if (ModelState.IsValid)
            {
                _ = Mapper.Map(model, role);
                await _roleManager.UpdateAsync(role);

                Notifier.Success("你已成功编辑一条角色记录。");
                return(RedirectToAction(nameof(List)));
            }
            return(View(model));
        }
Esempio n. 5
0
        public ActionResult Edit(string id)
        {
            CreateOrEditRoleViewModel viewModel = new CreateOrEditRoleViewModel {
                SaveMode = EnumSaveMode.Update
            };

            using (TestEntities db = new TestEntities())
            {
                var role = db.Roles.Where(y => y.RoleID == id).SingleOrDefault();
                if (role != null)
                {
                    viewModel.RoleId      = role.RoleID;
                    viewModel.RoleName    = role.RoleName;
                    viewModel.Description = role.Description;
                    viewModel.AllMenu     = Menu.GetSubMenu(id);
                }
                return(View("_Edit", viewModel));
            }
        }
Esempio n. 6
0
        public ActionResult Save(CreateOrEditRoleViewModel model)
        {
            //valid
            //Rule1:驗證是否已經存在相同代碼 (只有新增時 檢查)
            using (TestEntities db = new TestEntities())
            {
                if (model.SaveMode == EnumSaveMode.Create)
                {
                    var isExist = db.Roles.Where(y => y.RoleID == model.RoleId).SingleOrDefault() != null ? true : false;
                    if (isExist)
                    {
                        ModelState.AddModelError("", string.Format("群組代碼{0}已存在", model.RoleId));
                    }
                }

                //Rule2:檢查有沒有勾選權限
                if (model.PermissionList.Count == 0)
                {
                    ModelState.AddModelError("", "請至少勾選一個權限");
                }

                if (ModelState.IsValid)
                {
                    try
                    {
                        var userInfo = User.GetMVCUser();
                        if (model.SaveMode == EnumSaveMode.Create)
                        {
                            Roles role = new Roles
                            {
                                RoleID         = model.RoleId,
                                RoleName       = model.RoleName,
                                Description    = model.Description,
                                CreatorAccount = userInfo.UserId,
                                DateCreated    = DateTime.Now,
                                IsDefault      = false
                            };

                            //塞權限
                            foreach (var item in model.PermissionList)
                            {
                                //item is "SYS01-Delete"
                                var detailArr    = item.Split('-');
                                var permissionID = detailArr[0];
                                var operationID  = detailArr[1];
                                var temp         = db.PermissionOperations
                                                   .Where(x => x.PermissionID == permissionID && x.OperationID == operationID)
                                                   .FirstOrDefault();
                                role.PermissionOperations.Add(temp);
                            }

                            db.Entry <Roles>(role).State = EntityState.Added;
                        }
                        else
                        {
                            var role = db.Roles.Where(y => y.RoleID == model.RoleId).SingleOrDefault();
                            role.RoleName        = model.RoleName;
                            role.Description     = model.Description;
                            role.ModifierAccount = userInfo.UserId;
                            role.DateModified    = DateTime.Now;

                            //全砍再新增
                            if (role.PermissionOperations.Count > 0)
                            {
                                role.PermissionOperations.Clear();
                            }

                            //塞權限
                            foreach (var item in model.PermissionList)
                            {
                                //item is "SYS01-Delete"
                                var detailArr    = item.Split('-');
                                var permissionID = detailArr[0];
                                var operationID  = detailArr[1];
                                var temp         = db.PermissionOperations
                                                   .Where(x => x.PermissionID == permissionID && x.OperationID == operationID)
                                                   .FirstOrDefault();
                                role.PermissionOperations.Add(temp);
                            }
                        }

                        db.SaveChanges();

                        //當編輯成功更新系統的權限快取
                        if (model.SaveMode == EnumSaveMode.Update)
                        {
                            List <string> cacheKeysToDie = new List <string>();
                            // retrieve application Cache enumerator
                            var enumerator = HttpRuntime.Cache.GetEnumerator();

                            // copy all keys that currently exist in Cache
                            while (enumerator.MoveNext())
                            {
                                var tempCache = enumerator.Key.ToString();
                                if (tempCache.Contains(model.RoleId))
                                {
                                    cacheKeysToDie.Add(tempCache);
                                }
                            }

                            // delete every key from cache

                            foreach (var item in cacheKeysToDie)
                            {
                                HttpRuntime.Cache.Remove(item);
                            }
                        }



                        return(Json(new { success = true }));
                    }
                    catch (DbEntityValidationException dbEx)
                    {
                        var errors = dbEx.EntityValidationErrors.SelectMany(x => x.ValidationErrors.Select(y => y.PropertyName + ":" + y.ErrorMessage)).FirstOrDefault();
                        ModelState.AddModelError("", "系統發生錯誤:" + errors);
                        _logger.Error(dbEx, "Save - 發生錯誤:{0}");
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError("", "系統發生錯誤:" + ex.Message);
                        _logger.Error(ex, "Save - 發生錯誤:{0}");
                    }
                }

                return(Json(new { errors = ModelState.GetErrors() }));
            }
        }