Files
Orchard/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs

158 lines
6.0 KiB
C#
Raw Normal View History

using System.Linq;
using System.Web.Mvc;
using Orchard.ContentManagement;
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Notify;
Code cleanup and consistency (renaming to match patterns, moving namespaces, etc) --HG-- branch : dev rename : src/Orchard.Web/Core/Common/Controllers/BodyDriver.cs => src/Orchard.Web/Core/Common/Drivers/BodyDriver.cs rename : src/Orchard.Web/Core/Common/Controllers/RoutableDriver.cs => src/Orchard.Web/Core/Common/Drivers/RoutableDriver.cs rename : src/Orchard.Web/Core/Common/Models/BodyAspectHandler.cs => src/Orchard.Web/Core/Common/Handlers/BodyAspectHandler.cs rename : src/Orchard.Web/Core/Common/Models/CommonAspectHandler.cs => src/Orchard.Web/Core/Common/Handlers/CommonAspectHandler.cs rename : src/Orchard.Web/Core/Common/Models/RoutableAspectHandler.cs => src/Orchard.Web/Core/Common/Handlers/RoutableAspectHandler.cs rename : src/Orchard.Web/Core/Common/Records/BodyRecord.cs => src/Orchard.Web/Core/Common/Models/BodyRecord.cs rename : src/Orchard.Web/Core/Common/Records/CommonRecord.cs => src/Orchard.Web/Core/Common/Models/CommonRecord.cs rename : src/Orchard.Web/Core/Common/Records/CommonVersionRecord.cs => src/Orchard.Web/Core/Common/Models/CommonVersionRecord.cs rename : src/Orchard.Web/Core/Common/Records/RoutableRecord.cs => src/Orchard.Web/Core/Common/Models/RoutableRecord.cs rename : src/Orchard.Web/Core/Navigation/Records/MenuItemRecord.cs => src/Orchard.Web/Core/Navigation/Models/MenuItemRecord.cs rename : src/Orchard.Web/Core/Navigation/Records/MenuPartRecord.cs => src/Orchard.Web/Core/Navigation/Models/MenuPartRecord.cs rename : src/Orchard.Web/Core/Navigation/Services/MainMenu.cs => src/Orchard.Web/Core/Navigation/Services/MainMenuService.cs rename : src/Orchard.Web/Core/Scheduling/Records/ScheduledTaskRecord.cs => src/Orchard.Web/Core/Scheduling/Models/ScheduledTaskRecord.cs rename : src/Orchard.Web/Core/Settings/Controllers/SiteSettingsDriver.cs => src/Orchard.Web/Core/Settings/Drivers/SiteSettingsDriver.cs rename : src/Orchard.Web/Core/Settings/Models/SiteSettingsHandler.cs => src/Orchard.Web/Core/Settings/Handlers/SiteSettingsHandler.cs rename : src/Orchard.Web/Core/Settings/Records/SiteSettingsRecord.cs => src/Orchard.Web/Core/Settings/Models/SiteSettingsRecord.cs rename : src/Orchard.Web/Core/Themes/Models/ThemeSiteSettingsHandler.cs => src/Orchard.Web/Core/Themes/Handlers/ThemeSiteSettingsHandler.cs rename : src/Orchard.Web/Core/Themes/Records/ThemeRecord.cs => src/Orchard.Web/Core/Themes/Models/ThemeRecord.cs rename : src/Orchard.Web/Core/Themes/Records/ThemeSiteSettingsRecord.cs => src/Orchard.Web/Core/Themes/Models/ThemeSiteSettingsRecord.cs rename : src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogDriver.cs => src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogDriver.cs rename : src/Orchard.Web/Modules/Orchard.Blogs/Controllers/BlogPostDriver.cs => src/Orchard.Web/Modules/Orchard.Blogs/Drivers/BlogPostDriver.cs rename : src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogArchiveHandler.cs => src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogArchiveHandler.cs rename : src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogHandler.cs => src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogHandler.cs rename : src/Orchard.Web/Modules/Orchard.Blogs/Models/BlogPostHandler.cs => src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPostHandler.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Controllers/CommentDriver.cs => src/Orchard.Web/Modules/Orchard.Comments/Drivers/CommentDriver.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Controllers/HasCommentsContainerDriver.cs => src/Orchard.Web/Modules/Orchard.Comments/Drivers/HasCommentsContainerDriver.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Controllers/HasCommentsDriver.cs => src/Orchard.Web/Modules/Orchard.Comments/Drivers/HasCommentsDriver.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Models/CommentHandler.cs => src/Orchard.Web/Modules/Orchard.Comments/Handlers/CommentHandler.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Models/CommentSettingsHandler.cs => src/Orchard.Web/Modules/Orchard.Comments/Handlers/CommentSettingsHandler.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Models/HasCommentsContainerHandler.cs => src/Orchard.Web/Modules/Orchard.Comments/Handlers/HasCommentsContainerHandler.cs rename : src/Orchard.Web/Modules/Orchard.Comments/Models/HasCommentsHandler.cs => src/Orchard.Web/Modules/Orchard.Comments/Handlers/HasCommentsHandler.cs rename : src/Orchard.Web/Modules/Orchard.DevTools/Models/DebugLinkHandler.cs => src/Orchard.Web/Modules/Orchard.DevTools/Handlers/DebugLinkHandler.cs rename : src/Orchard.Web/Modules/Orchard.Pages/Controllers/PageDriver.cs => src/Orchard.Web/Modules/Orchard.Pages/Drivers/PageDriver.cs rename : src/Orchard.Web/Modules/Orchard.Pages/Models/PageHandler.cs => src/Orchard.Web/Modules/Orchard.Pages/Handlers/PageHandler.cs rename : src/Orchard.Web/Modules/Orchard.Pages/Services/SlugConstraint.cs => src/Orchard.Web/Modules/Orchard.Pages/Routing/SlugConstraint.cs rename : src/Orchard.Web/Modules/Orchard.Pages/Services/SlugConstraintUpdator.cs => src/Orchard.Web/Modules/Orchard.Pages/Routing/SlugConstraintUpdator.cs rename : src/Orchard.Web/Modules/Orchard.Roles/Controllers/UserRolesDriver.cs => src/Orchard.Web/Modules/Orchard.Roles/Drivers/UserRolesDriver.cs rename : src/Orchard.Web/Modules/Orchard.Roles/Models/UserRolesHandler.cs => src/Orchard.Web/Modules/Orchard.Roles/Handlers/UserRolesHandler.cs rename : src/Orchard.Web/Modules/Orchard.Roles/Records/PermissionRecord.cs => src/Orchard.Web/Modules/Orchard.Roles/Models/PermissionRecord.cs rename : src/Orchard.Web/Modules/Orchard.Roles/Records/RoleRecord.cs => src/Orchard.Web/Modules/Orchard.Roles/Models/RoleRecord.cs rename : src/Orchard.Web/Modules/Orchard.Roles/Records/RolesPermissions.cs => src/Orchard.Web/Modules/Orchard.Roles/Models/RolesPermissionsRecord.cs rename : src/Orchard.Web/Modules/Orchard.Roles/Records/UserRolesRecord.cs => src/Orchard.Web/Modules/Orchard.Roles/Models/UserRolesRecord.cs rename : src/Orchard.Web/Modules/Orchard.Sandbox/Controllers/SandboxPageDriver.cs => src/Orchard.Web/Modules/Orchard.Sandbox/Drivers/SandboxPageDriver.cs rename : src/Orchard.Web/Modules/Orchard.Sandbox/Models/SandboxContentHandler.cs => src/Orchard.Web/Modules/Orchard.Sandbox/Handlers/SandboxContentHandler.cs rename : src/Orchard.Web/Modules/Orchard.Tags/Controllers/HasTagsDriver.cs => src/Orchard.Web/Modules/Orchard.Tags/Drivers/HasTagsDriver.cs rename : src/Orchard.Web/Modules/Orchard.Tags/Models/HasTagsHandler.cs => src/Orchard.Web/Modules/Orchard.Tags/Handlers/HasTagsHandler.cs rename : src/Orchard.Web/Modules/Orchard.Users/Controllers/UserDriver.cs => src/Orchard.Web/Modules/Orchard.Users/Drivers/UserDriver.cs rename : src/Orchard.Web/Modules/Orchard.Users/Models/UserHandler.cs => src/Orchard.Web/Modules/Orchard.Users/Handlers/UserHandler.cs
2010-03-03 23:31:42 -08:00
using Orchard.Users.Drivers;
using Orchard.Users.Models;
using Orchard.Users.Services;
using Orchard.Users.ViewModels;
namespace Orchard.Users.Controllers {
[ValidateInput(false)]
public class AdminController : Controller, IUpdateModel {
private readonly IMembershipService _membershipService;
private readonly IUserService _userService;
public AdminController(
IOrchardServices services,
IMembershipService membershipService,
IUserService userService) {
Services = services;
_membershipService = membershipService;
_userService = userService;
T = NullLocalizer.Instance;
}
public IOrchardServices Services { get; set; }
public Localizer T { get; set; }
public ActionResult Index() {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to list users")))
return new HttpUnauthorizedResult();
var users = Services.ContentManager
.Query<User, UserRecord>()
.Where(x => x.UserName != null)
.List();
var model = new UsersIndexViewModel {
Rows = users
.Select(x => new UsersIndexViewModel.Row { User = x })
.ToList()
};
return View(model);
}
public ActionResult Create() {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.New<IUser>(UserDriver.ContentType.Name);
var model = new UserCreateViewModel {
User = Services.ContentManager.BuildEditorModel(user)
};
return View(model);
}
[HttpPost, ActionName("Create")]
public ActionResult CreatePOST(UserCreateViewModel model) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var user = Services.ContentManager.New<IUser>(UserDriver.ContentType.Name);
model.User = Services.ContentManager.UpdateEditorModel(user, this);
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
return View(model);
}
string userExistsMessage = _userService.VerifyUserUnicity(model.UserName, model.Email);
if (userExistsMessage != null) {
2010-04-16 12:47:06 -07:00
AddModelError("NotUniqueUserName", T(userExistsMessage));
}
if (model.Password != model.ConfirmPassword) {
2010-04-16 12:47:06 -07:00
AddModelError("ConfirmPassword", T("Password confirmation must match"));
}
user = _membershipService.CreateUser(new CreateUserParams(
model.UserName,
model.Password,
model.Email,
null, null, true));
model.User = Services.ContentManager.UpdateEditorModel(user, this);
if (ModelState.IsValid == false) {
Services.TransactionManager.Cancel();
return View(model);
}
return RedirectToAction("edit", new {user.Id});
}
public ActionResult Edit(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
return View(new UserEditViewModel {
User = Services.ContentManager.BuildEditorModel<User>(id)
});
}
[HttpPost, ActionName("Edit")]
public ActionResult EditPOST(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
var model = new UserEditViewModel {
User = Services.ContentManager.UpdateEditorModel<User>(id, this)
};
TryUpdateModel(model);
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
return View(model);
}
model.User.Item.NormalizedUserName = model.UserName.ToLower();
string userExistsMessage = _userService.VerifyUserUnicity(id, model.UserName, model.Email);
if (userExistsMessage != null) {
2010-04-16 12:47:06 -07:00
AddModelError("NotUniqueUserName", T(userExistsMessage));
}
if (!ModelState.IsValid) {
Services.TransactionManager.Cancel();
return View(model);
}
Services.Notifier.Information(T("User information updated"));
return RedirectToAction("Edit", new { id });
}
public ActionResult Delete(int id) {
if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to manage users")))
return new HttpUnauthorizedResult();
Services.ContentManager.Remove(Services.ContentManager.Get(id));
Services.Notifier.Information(T("User deleted"));
return RedirectToAction("Index");
}
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {
return TryUpdateModel(model, prefix, includeProperties, excludeProperties);
}
2010-04-16 12:47:06 -07:00
public void AddModelError(string key, LocalizedString errorMessage) {
ModelState.AddModelError(key, errorMessage.ToString());
}
}
}