enrolment

vnext
Paul Schneider 5 years ago
parent a2f5886526
commit a6fcf3d3d7
17 changed files with 174 additions and 64 deletions

@ -21,7 +21,7 @@ namespace Yavsc.Controllers
private readonly UserManager<ApplicationUser> _userManager; private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<IdentityRole> _roleManager; private readonly RoleManager<IdentityRole> _roleManager;
private readonly ApplicationDbContext context; private readonly ApplicationDbContext _dbContext;
public AdministrationController(UserManager<ApplicationUser> userManager, public AdministrationController(UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager, RoleManager<IdentityRole> roleManager,
@ -29,7 +29,7 @@ namespace Yavsc.Controllers
{ {
_userManager = userManager; _userManager = userManager;
_roleManager = roleManager; _roleManager = roleManager;
this.context = context; this._dbContext = context;
} }
private async Task<bool> EnsureRoleList () { private async Task<bool> EnsureRoleList () {
@ -101,7 +101,7 @@ namespace Yavsc.Controllers
{ {
var adminCount = await _userManager.GetUsersInRoleAsync( var adminCount = await _userManager.GetUsersInRoleAsync(
Constants.AdminGroupName); Constants.AdminGroupName);
var userCount = await context.Users.CountAsync(); var userCount = await _dbContext.Users.CountAsync();
var youAreAdmin = await _userManager.IsInRoleAsync( var youAreAdmin = await _userManager.IsInRoleAsync(
await _userManager.FindByIdAsync(User.GetUserId()), await _userManager.FindByIdAsync(User.GetUserId()),
Constants.AdminGroupName); Constants.AdminGroupName);
@ -139,7 +139,7 @@ namespace Yavsc.Controllers
var result = new RoleUserCollection { var result = new RoleUserCollection {
Id = role.Id, Id = role.Id,
Name = role.Name, Name = role.Name,
Users = context.Users.Where(u=>role.Users.Any(ru => u.Id == ru.UserId)) Users = _dbContext.Users.Where(u=>role.Users.Any(ru => u.Id == ru.UserId))
.Select( u => new UserInfo { UserName = u.UserName, Avatar = u.Avatar, UserId = u.Id } ) .Select( u => new UserInfo { UserName = u.UserName, Avatar = u.Avatar, UserId = u.Id } )
.ToArray() .ToArray()
}; };
@ -147,29 +147,57 @@ namespace Yavsc.Controllers
} }
[Authorize("AdministratorOnly")] [Authorize("AdministratorOnly")]
public IActionResult GiveAdmin() public IActionResult Enroll(string roleName)
{ {
ViewBag.NewAdminId = new SelectList(context.Users, "Id", "UserName"); ViewBag.UserId = new SelectList(_dbContext.Users, "Id", "UserName");
return View(); return View(new EnrolerViewModel{ RoleName = roleName });
} }
[Authorize("AdministratorOnly")] [Authorize("AdministratorOnly")]
[HttpPost()] [HttpPost()]
public async Task<IActionResult> GiveAdmin(NewAdminViewModel model) public async Task<IActionResult> Enroll(EnrolerViewModel model)
{ {
if (ModelState.IsValid) if (ModelState.IsValid)
{ {
var newAdmin = await context.Users.FirstOrDefaultAsync(u=>u.Id==model.NewAdminId); var newAdmin = await _dbContext.Users.FirstOrDefaultAsync(u=>u.Id==model.EnroledUserId);
if (newAdmin==null) return HttpNotFound(); if (newAdmin==null) return HttpNotFound();
var addToRoleResult = await _userManager.AddToRoleAsync(newAdmin, Constants.AdminGroupName); var addToRoleResult = await _userManager.AddToRoleAsync(newAdmin, model.RoleName);
if (!addToRoleResult.Succeeded) if (addToRoleResult.Succeeded)
{ {
return View("Index"); return RedirectToAction("Index");
} }
AddErrors(addToRoleResult); AddErrors(addToRoleResult);
} }
ViewBag.NewAdminId = new SelectList(context.Users, "Id", "UserName"); ViewBag.UserId = new SelectList(_dbContext.Users, "Id", "UserName");
return View(); return View(model);
}
[Authorize("AdministratorOnly")]
public async Task<IActionResult> Fire(string roleName, string userId)
{
var user = await _dbContext.Users.FirstOrDefaultAsync(u=>u.Id==userId);
if (user == null) return HttpNotFound();
return View(new FireViewModel{ RoleName = roleName, EnroledUserId = userId, EnroledUserName = user.UserName });
}
[Authorize("AdministratorOnly")]
[HttpPost()]
public async Task<IActionResult> Fire(FireViewModel model)
{
if (ModelState.IsValid)
{
var oldEnroled = await _dbContext.Users.FirstOrDefaultAsync(u=>u.Id==model.EnroledUserId);
if (oldEnroled==null) return HttpNotFound();
var removeFromRole = await _userManager.RemoveFromRoleAsync(oldEnroled, model.RoleName);
if (removeFromRole.Succeeded)
{
return RedirectToAction("Index");
}
AddErrors(removeFromRole);
}
ViewBag.UserId = new SelectList(_dbContext.Users, "Id", "UserName");
return View(model);
} }
private void AddErrors(IdentityResult result) private void AddErrors(IdentityResult result)
{ {

@ -8,7 +8,7 @@ MAKEFILE_DIR=$(SOURCE_DIR)/scripts/build/make
BASERESX= Resources/Yavsc.ChatHub.resx\ BASERESX= Resources/Yavsc.ChatHub.resx\
Resources/Yavsc.ViewComponents.CommentViewComponent.resx\ Resources/Yavsc.ViewComponents.CommentViewComponent.resx\
Resources/Yavsc.ViewModels.FrontOffice.PerformerProfileViewModel.resx\ Resources/Yavsc.ViewModels.FrontOffice.PerformerProfileViewModel.resx\
Resources/Yavsc.ViewModels.NewAdminViewModel.resx\ Resources/Yavsc.ViewModels.EnrolerViewModel.resx\
Resources/Yavsc.YavscLocalisation.resx Resources/Yavsc.YavscLocalisation.resx
BASERESXGEN=$(BASERESX:.resx=.Designer.cs) BASERESXGEN=$(BASERESX:.resx=.Designer.cs)

@ -16,7 +16,7 @@ namespace Yavsc.ViewModels {
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public partial class NewAdminViewModel { public partial class EnrolerViewModel {
private static System.Resources.ResourceManager resourceMan; private static System.Resources.ResourceManager resourceMan;
@ -26,7 +26,7 @@ namespace Yavsc.ViewModels {
public static System.Resources.ResourceManager ResourceManager { public static System.Resources.ResourceManager ResourceManager {
get { get {
if (object.Equals(null, resourceMan)) { if (object.Equals(null, resourceMan)) {
System.Resources.ResourceManager temp = new System.Resources.ResourceManager(("Yavsc.Resources." + "Yavsc.ViewModels.NewAdminViewModel"), typeof(NewAdminViewModel).GetTypeInfo().Assembly); System.Resources.ResourceManager temp = new System.Resources.ResourceManager(("Yavsc.Resources." + "Yavsc.ViewModels.EnrolerViewModel"), typeof(EnrolerViewModel).GetTypeInfo().Assembly);
resourceMan = temp; resourceMan = temp;
} }
return resourceMan; return resourceMan;
@ -43,9 +43,15 @@ namespace Yavsc.ViewModels {
} }
} }
public static string NewAdminLabel { public static string EnroledLabel {
get { get {
return ResourceManager.GetString("NewAdminLabel", resourceCulture); return ResourceManager.GetString("EnroledLabel", resourceCulture);
}
}
public static string RoleNameLabel {
get {
return ResourceManager.GetString("RoleNameLabel", resourceCulture);
} }
} }
} }

@ -58,5 +58,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="NewAdminLabel"><value>Nouvel administrateur</value></data> <data name="EnroledLabel"><value>Enrôlé</value></data>
<data name="RoleNameLabel"><value>Rôle</value></data>
</root> </root>

@ -2071,9 +2071,15 @@ namespace Yavsc {
} }
} }
public static string GiveAdmin { public static string Enroll {
get { get {
return ResourceManager.GetString("GiveAdmin", resourceCulture); return ResourceManager.GetString("Enroll", resourceCulture);
}
}
public static string Fire {
get {
return ResourceManager.GetString("Fire", resourceCulture);
} }
} }
} }

@ -497,5 +497,6 @@ Facture réglée: {5}</value></data>
<data name="AllowMonthlyEmail"><value>Recevoir la lettre mensuelle d'information</value></data> <data name="AllowMonthlyEmail"><value>Recevoir la lettre mensuelle d'information</value></data>
<data name="Join"><value>joindre</value></data> <data name="Join"><value>joindre</value></data>
<data name="GiveAdmin"><value>Compromettre l'administration</value></data> <data name="Enroll"><value>Enrôler</value></data>
<data name="Fire"><value>Licencier</value></data>
</root> </root>

@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace Yavsc.ViewModels
{
public partial class EnrolerViewModel {
[Display(Name="EnroledLabel", ResourceType=typeof(EnrolerViewModel))]
[Required]
public string EnroledUserId { get; set; }
[Display(Name="RoleNameLabel", ResourceType=typeof(EnrolerViewModel))]
[Required]
public string RoleName { get; set; }
}
}

@ -0,0 +1,18 @@
using System.ComponentModel.DataAnnotations;
namespace Yavsc.ViewModels
{
public partial class FireViewModel {
[Display(Name="EnroledLabel", ResourceType=typeof(EnrolerViewModel))]
public string EnroledUserName { get; set; }
[Required]
public string EnroledUserId { get; set; }
[Display(Name="RoleNameLabel", ResourceType=typeof(EnrolerViewModel))]
[Required]
public string RoleName { get; set; }
}
}

@ -1,11 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace Yavsc.ViewModels
{
public partial class NewAdminViewModel {
[Display(Name="NewAdminLabel", ResourceType=typeof(NewAdminViewModel))]
[Required]
public string NewAdminId { get; set; }
}
}

@ -67,7 +67,7 @@
<div class="form-group"> <div class="form-group">
<div class="col-md-offset-2 col-md-10"> <div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" /> <input type="submit" value="@SR["Create"]" class="btn btn-default" />
</div> </div>
</div> </div>
</div> </div>

@ -0,0 +1,29 @@
@model Yavsc.ViewModels.EnrolerViewModel
@{ 
ViewBag.Title = SR["Enroll"]+" : "+Model.RoleName;
}
<form asp-action="Enroll">
<div class="form-horizontal">
<h4>@ViewBag.Title</h4>
<hr />
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="EnroledUserId" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="EnroledUserId" asp-items=@ViewBag.UserId class="form-control" >
</select>
<span asp-validation-for="EnroledUserId" class="text-danger" ></span>
</div>
</div>
<input type="hidden" asp-for="RoleName" />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="@SR["Submit"]" class="btn btn-default" />
</div>
</div>
</div>
</form>

@ -0,0 +1,33 @@
@model Yavsc.ViewModels.FireViewModel
@{ 
ViewBag.Title = SR["Fire"]+" : "+Model.RoleName;
}
<form asp-action="Fire">
<div class="form-horizontal">
<h4>@ViewBag.Title</h4>
<hr />
<span asp-validation-for="RoleName" class="text-danger" ></span>
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="EnroledUserName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<p class="col-md-7">
@Html.DisplayFor(model => model.EnroledUserName)
</p>
<span asp-validation-for="EnroledUserId" class="text-danger" ></span>
</div>
</div>
<input type="hidden" asp-for="RoleName" />
<input type="hidden" asp-for="EnroledUserId" />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="@SR["Submit"]" class="btn btn-default" />
</div>
</div>
</div>
</form>

@ -1,23 +0,0 @@
@model Yavsc.ViewModels.NewAdminViewModel
@{ 
ViewBag.Title = SR["GiveAdmin"];
}
<form asp-action="GiveAdmin">
<div class="form-horizontal">
<h4>@ViewBag.Title</h4>
<hr />
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="NewAdminId" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="NewAdminId" asp-items=@ViewBag.NewAdminId class="form-control" >
</select>
<span asp-validation-for="NewAdminId" class="text-danger" ></span>
</div>
</div>
</div>
</form>

@ -48,12 +48,13 @@ Nombre </dt><dd> @Model.AdminCount</dd>
Gestion des couleurs Gestion des couleurs
</a> </a>
<h3>GCM Devices</h3> <h3>Devices</h3>
<a asp-controller="GCMDevices" class="btn btn-primary"> <a asp-controller="Devices" class="btn btn-primary">
Google Cloud Messaging Cloud Messaging
</a> </a>
<h3>Applications tièrces</h3> <h3>Applications tièrces</h3>
<a asp-controller="Client" class="btn btn-primary"> <a asp-controller="Client" class="btn btn-primary">
@SR["OAuth key management"] @SR["OAuth key management"]
</a> </a>

@ -4,13 +4,17 @@
} }
<h2>@ViewBag.Title</h2> <h2>@ViewBag.Title</h2>
<p>
<a asp-action="Enroll" asp-route-RoleName="@Model.Name" class="btn btn-default" >@SR["Enroll"]</a>
</p>
<ul> <ul>
@foreach (var user in Model.Users) { @foreach (var user in Model.Users) {
<li> <img src="~/avatars/@(user.UserName).xs.png" alt="avatar"/> <li> <img src="~/avatars/@(user.UserName).xs.png" alt="avatar"/>
@user.UserName @user.UserName
<a asp-action="Fire" asp-route-RoleName="@Model.Name" asp-route-UserId="@user.UserId" class="btn btn-success" >
<img src="~/images/ptcroix.png" /> @SR["Fire"]</a>
</li> </li>
} }
</ul> </ul>
<a asp-action="GiveAdmin">@SR["GiveAdmin"]</a>
Loading…