public List<PermissionModel> SortPermissionForTree(int parentId, string indexKey = "1")
        {
            var model = new List<PermissionModel>();
            foreach (var p in _permissionService.GetAllPermissionsByParentId(parentId))
            {
                var pm = new PermissionModel
                {
                    Id = p.Id,
                    Name = _permissionService.GetFormattedBreadCrumb(p),
                    ParentId = p.ParentId
                };
                if (parentId == 0)
                {
                    pm.IndexKey = p.Id.ToString();
                }
                else
                {
                    pm.IndexKey = indexKey + "_" + p.Id.ToString();
                }

                pm.ChildPermissions.AddRange(SortPermissionForTree(p.Id, pm.IndexKey));
                model.Add(pm);
            }
            return model;
        }
        protected virtual void PrepareAllPermissionsModel(PermissionModel model)
        {
            if (model == null)
                throw new ArgumentNullException("model");

            model.AvailablePermissions.Add(new SelectListItem()
            {
                Text = "父权限",
                Value = "0"
            });
            var permissions = _permissionService.GetAllPermission();
            foreach (var p in permissions)
            {
                model.AvailablePermissions.Add(new SelectListItem()
                {
                    Text = _permissionService.GetFormattedBreadCrumb(p),
                    Value = p.Id.ToString()
                });
            }
        }
        public ActionResult Create(PermissionModel model, bool continueEditing)
        {
            if (ModelState.IsValid)
            {
                var permission = model.ToEntity();
                _permissionService.InsertPermission(permission);

                SuccessNotification("添加成功");
                return continueEditing ? RedirectToAction("Edit", new { id = permission.Id }) : RedirectToAction("List");
            }
            PrepareAllPermissionsModel(model);
            return View(model);
        }
        public ActionResult Edit(PermissionModel model, bool continueEditing)
        {
            var permission = _permissionService.GetPermissionById(model.Id);

            if (ModelState.IsValid)
            {
                permission = model.ToEntity(permission);
                _permissionService.UpdatePermission(permission);

                SuccessNotification("保存成功");
                return continueEditing ? RedirectToAction("Edit", new { id = permission.Id }) : RedirectToAction("List");
            }
            PrepareAllPermissionsModel(model);
            return View(model);
        }
 public ActionResult Create()
 {
     var model = new PermissionModel();
     PrepareAllPermissionsModel(model);
     return View(model);
 }