public ActionResult Create(UserHostSearchCreate value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            var search = this.UserHostSearchService.Create();
            var privilege = new UserHostSearchPrivilege();

            if (!privilege.CanCreate(search))
            {
                return NotAuthorized();
            }

            value.Validate();

            if (value.IsValid)
            {
                value.ValueToModel(search);

                this.UserHostSearchService.Insert(search);

                return base.RedirectToRoute(UsersAdministrationRoutes.HostSearchIndex, new { id = search.Id });
            }

            value.CopyToModel(ModelState);

            var searches = this.UserHostSearchService.GetAll(new UserHostSearchUserSpecification(base.Identity.Id));

            value.Initialize(searches);

            return base.View(Views.Create, value);
        }
        public ActionResult Create()
        {
            var search = this.UserHostSearchService.Create();
            var privilege = new UserHostSearchPrivilege();

            if (!privilege.CanCreate(search))
            {
                return NotAuthorized();
            }

            var searches = this.UserHostSearchService.GetAll(new UserHostSearchUserSpecification(base.Identity.Id));
            var value = new UserHostSearchCreate();

            value.Initialize(searches);

            return base.View(Views.Create, value);
        }
        public ActionResult Delete(UserHostSearchDelete value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            var search = UserHostSearchService.GetById(value.Id);

            if (search == null)
            {
                return base.HttpNotFound();
            }

            var privilege = new UserHostSearchPrivilege();

            if (!privilege.CanDelete(search))
            {
                return NotAuthorized();
            }

            this.UserHostSearchService.Delete(search);

            return base.RedirectToRoute(UsersAdministrationRoutes.HostSearchCreate);
        }
        public ActionResult Index(int id, int? page)
        {
            var search = this.UserHostSearchService.GetById(id);

            if (search == null)
            {
                return base.HttpNotFound();
            }

            var hosts = this.UserHostSearchService.GetResults(search, new UserHostSearchSpecification
            {
                Page = page,
                Limit = Setting.UserHostSearchPageLimit.Value
            });

            var privilege = new UserHostSearchPrivilege();

            return privilege.CanViewAny(search) ? base.View(Views.Index, hosts) : NotAuthorized();
        }
        public ActionResult Delete(int id)
        {
            var search = this.UserHostSearchService.GetById(id);

            if (search == null)
            {
                return HttpNotFound();
            }

            var privilege = new UserHostSearchPrivilege();

            return privilege.CanDelete(search) ? base.View(Views.Delete, new UserHostSearchDelete(search)) : NotAuthorized();
        }