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 RoleManager<IdentityRole> _roleManager;
private readonly ApplicationDbContext context;
private readonly ApplicationDbContext _dbContext;
public AdministrationController(UserManager<ApplicationUser> userManager,
RoleManager<IdentityRole> roleManager,
@ -29,7 +29,7 @@ namespace Yavsc.Controllers
{
_userManager = userManager;
_roleManager = roleManager;
this.context = context;
this._dbContext = context;
}
private async Task<bool> EnsureRoleList () {
@ -101,7 +101,7 @@ namespace Yavsc.Controllers
{
var adminCount = await _userManager.GetUsersInRoleAsync(
Constants.AdminGroupName);
var userCount = await context.Users.CountAsync();
var userCount = await _dbContext.Users.CountAsync();
var youAreAdmin = await _userManager.IsInRoleAsync(
await _userManager.FindByIdAsync(User.GetUserId()),
Constants.AdminGroupName);
@ -139,7 +139,7 @@ namespace Yavsc.Controllers
var result = new RoleUserCollection {
Id = role.Id,
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 } )
.ToArray()
};
@ -147,29 +147,57 @@ namespace Yavsc.Controllers
}
[Authorize("AdministratorOnly")]
public IActionResult GiveAdmin()
public IActionResult Enroll(string roleName)
{
ViewBag.NewAdminId = new SelectList(context.Users, "Id", "UserName");
return View();
ViewBag.UserId = new SelectList(_dbContext.Users, "Id", "UserName");
return View(new EnrolerViewModel{ RoleName = roleName });
}
[Authorize("AdministratorOnly")]
[HttpPost()]
public async Task<IActionResult> GiveAdmin(NewAdminViewModel model)
public async Task<IActionResult> Enroll(EnrolerViewModel model)
{
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();
var addToRoleResult = await _userManager.AddToRoleAsync(newAdmin, Constants.AdminGroupName);
if (!addToRoleResult.Succeeded)
var addToRoleResult = await _userManager.AddToRoleAsync(newAdmin, model.RoleName);
if (addToRoleResult.Succeeded)
{
return View("Index");
return RedirectToAction("Index");
}
AddErrors(addToRoleResult);
}
ViewBag.NewAdminId = new SelectList(context.Users, "Id", "UserName");
return View();
ViewBag.UserId = new SelectList(_dbContext.Users, "Id", "UserName");
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)
{

@ -8,7 +8,7 @@ MAKEFILE_DIR=$(SOURCE_DIR)/scripts/build/make
BASERESX= Resources/Yavsc.ChatHub.resx\
Resources/Yavsc.ViewComponents.CommentViewComponent.resx\
Resources/Yavsc.ViewModels.FrontOffice.PerformerProfileViewModel.resx\
Resources/Yavsc.ViewModels.NewAdminViewModel.resx\
Resources/Yavsc.ViewModels.EnrolerViewModel.resx\
Resources/Yavsc.YavscLocalisation.resx
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.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public partial class NewAdminViewModel {
public partial class EnrolerViewModel {
private static System.Resources.ResourceManager resourceMan;
@ -26,7 +26,7 @@ namespace Yavsc.ViewModels {
public static System.Resources.ResourceManager ResourceManager {
get {
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;
}
return resourceMan;
@ -43,9 +43,15 @@ namespace Yavsc.ViewModels {
}
}
public static string NewAdminLabel {
public static string EnroledLabel {
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">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</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>

@ -2071,9 +2071,15 @@ namespace Yavsc {
}
}
public static string GiveAdmin {
public static string Enroll {
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="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>

@ -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="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>

@ -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
</a>
<h3>GCM Devices</h3>
<a asp-controller="GCMDevices" class="btn btn-primary">
Google Cloud Messaging
<h3>Devices</h3>
<a asp-controller="Devices" class="btn btn-primary">
Cloud Messaging
</a>
<h3>Applications tièrces</h3>
<a asp-controller="Client" class="btn btn-primary">
@SR["OAuth key management"]
</a>

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