Nouvelles fonctionalités:

- Gestion des déploiement de configurations
- Ajout et suppression d'utilisateurs au groupes (autres que celui des admins)
- Page à customiser en cas d'accès à une ressource d'accès restreint, qui par défaut
  n'indique que le nom de controleur et celui de la methode concérnée, et qui ajoute,
  seulement dans le cas ou l'utilisateur est administrateur, les noms de groupes ou d'utilisateur
  autorisés, avec la mentions "admins only" invitant à la discretion.

* Microsoft.Web.XmlTransform.dll: Copié de l'import Nuget de
  Mono.Web.Xdt (transformations de fichiers de configuration)

* yavsc.admin.js: Implémente les méthodes Javascript de l'interface
  utilisateur de suppression et d'ajout d'un utilisateur à un groupe:
un widget jQuery pour la suppression, l'accès à l'API

* RestrictedArea.aspx: Page vue par l'utilisateur si par malheur il
  suivait un lien vers un contenu d'accès restreint, à la place d'un
  code Http 404 ou autre.
Si cet utilisateur est administrateur, la page lui affiche les rôles
  ou utilisateurs autorisés à accèder au contenu.

* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx: Page vue par l'utilisateur si par malheur il
  suivait un lien vers un contenu d'accès restreint, à la place d'un
  code Http 404 ou autre.
  Si cet utilisateur est administrateur, la page lui affiche les rôles
  ou utilisateurs autorisés à accèder au contenu.

* Makefile: retour au débuggage de la copie de travaille, et pas de la
  déployée. La copie de travail sera avec les mots de passe, et donc toujours différente de celle sous git,
  mais c'est pas grave.

* AccountController.cs: Evite de mettre à jour un mot de passe avec
  des valeures non attendues

* style.css: corrige un mouvement de la disposition au survol de la
  souris

* AuthorizeAttribute.cs: enlève la redirection à l'accès restreint, et
  fixe pas la même la transmission des données `Roles` et `Users` de
  la vue

* AdminController.cs: Evite de supprimer un utilisateur d'un groupe
  avec des valeures non attendues

* HomeController.cs: Il n'y avait pas à créer de methode pour la vue
  publique de l'accès restreint.

* YavscAjaxHelper.cs: évite d'avoir à convertir en chaine les valeurs
  de la vue.

* App.master: Cette page maître affiche encore beaucoup de billets de
  blog, on y installe le coteur, de base. Ça changera quand les blogs
  auront (enfin) leur page maître dédiée.

* AppAdmin.master: synchronisation avec la page maître principale
  (thémes)

* NoLogin.master: synchronisation avec la page maître
  principale.(thémes)

* yavsc.rate.js: supprime l'initialisation de tous les type de cotes
  depuis le script global.
C'est fait sur les pages qui en ont besoin, et seulement pour les
  types de cotes concernés.

* AddUserToRole.ascx: Ce formulaire est maintenant à la fois
  opérationel depuis une interface web sans javascript, et à la Ajax
  quand Javascript activé.

* UsersInRole.aspx: implémente l'interface utilisateur pour
l'ajout et la suppression d'un utilisateur à un groupe

* Skills.aspx: initialise le coteur js des compétences site

* UserSkills.aspx: initialise le coteur js de compétences utilisateur

* Web.csproj: un script et des pages d'erreur d'accès, il en faut une
  par controlleur s'il veut restreindre ses accès sans rendre de code Http 403 ou 404.

* UserNameBase.cs: Permet l'usage des espaces dans les noms
  d'utilisateurs, à la création legacy, ou autres usage du nom d'utilisateur.
vnext
Paul Schneider 9 years ago
parent 029a80e2c4
commit 77eed811f5
30 changed files with 348 additions and 63 deletions

@ -1,3 +1,8 @@
2015-11-21 Paul Schneider <paul@pschneider.fr>
* Makefile: retour au débuggage de la copie de travaille, et
pas de la déployée
2015-11-19 Paul Schneider <paul@pschneider.fr>
* .gitignore: ignore my new config transformation sources

@ -59,8 +59,8 @@ distclean: clean
sourcepkg:
git archive --format=tar --prefix=yavsc-$(CONFIG)/ $(CONFIG) | bzip2 > yavsc-$(CONFIG).tar.bz2
start_xsp: deploy
(cd $(LDYDESTDIR); export MONO_OPTIONS=--debug; xsp4 --port 8080)
start_xsp: build
(cd web; export MONO_OPTIONS=--debug; xsp4 --port 8080)
xmldoc: $(patsubst %,web/bin/%,$(DOCASSBS))
mdoc-update $^ $(patsubst %.dll,-i%.xml,$^) --out web/xmldoc
@ -84,3 +84,5 @@ nuget_restore:
nuget_update:
for prj in ITContentProvider NpgsqlBlogProvider NpgsqlContentProvider NpgsqlMRPProviders Presta SalesCatalog TestAPI web WebControls yavscclient yavscModel; do nuget update "$${prj}/packages.config" ; done

@ -96,20 +96,32 @@ namespace Yavsc.ApiControllers
[ValidateAjax]
public void ResetPassword (LostPasswordModel model)
{
StringDictionary errors;
MembershipUser user;
YavscHelpers.ValidatePasswordReset (model, out errors, out user);
foreach (string key in errors.Keys)
ModelState.AddModelError (key, errors [key]);
if (user != null && ModelState.IsValid)
Url.SendActivationMessage (user);
if (ModelState.IsValid) {
StringDictionary errors;
MembershipUser user;
YavscHelpers.ValidatePasswordReset (model, out errors, out user);
foreach (string key in errors.Keys)
ModelState.AddModelError (key, errors [key]);
if (user != null && ModelState.IsValid)
Url.SendActivationMessage (user);
}
}
[ValidateAjax]
[Authorize(Roles="Admin")]
public void AddUserToRole(UserRole model)
{
Roles.AddUserToRole (model.UserName, model.Role);
if (ModelState.IsValid)
Roles.AddUserToRole (model.UserName, model.Role);
}
[ValidateAjax]
[Authorize(Roles="Admin")]
public void RemoveUserFromRole(UserRole model)
{
if (ModelState.IsValid)
Roles.RemoveUserFromRoles (model.UserName,
new string [] { model.Role } );
}
}

@ -154,13 +154,16 @@ ul.editablelist>li {
border: solid grey 1px;
border-radius: 1em;
}
ul.editablelist>li:before {
font-family: 'FontAwesome';
content: "\f007";
}
ul.editablelist>li:hover {
background-color: rgba(128,0,0,0.5);
cursor:pointer;
}
ul.editablelist>li:hover:after {
ul.editablelist>li:hover:before {
font-family: 'FontAwesome';
content: "\f00d";
}

@ -40,11 +40,16 @@ namespace Yavsc
{
// let the client know which role were allowed here
// filterContext.ActionDescriptor.ControllerDescriptor.
filterContext.Result = new System.Web.Mvc.RedirectResult ("~/Home/RestrictedArea");
var result = new System.Web.Mvc.ViewResult();
filterContext.Controller.ViewData ["ActionName"] = filterContext.ActionDescriptor.ActionName;
filterContext.Controller.ViewData ["ControllerName"] = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
filterContext.Controller.ViewData ["Roles"] = Roles;
filterContext.Controller.ViewData ["Users"] = Users;
result.ViewName = "RestrictedArea";
result.ViewData = filterContext.Controller.ViewData;
filterContext.Result = result;
}
else filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
}

@ -1,3 +1,87 @@
2015-11-21 Paul Schneider <paul@pschneider.fr>
* Microsoft.Web.XmlTransform.dll: Copié de l'import Nuget de
Mono.Web.Xdt (transformations de fichiers de configuration)
* yavsc.admin.js: Implémente les méthodes Javascript de
l'interface utilisateur de suppression et d'ajout d'un
utilisateur à un groupe:
un widget jQuery pour la suppression, l'accès à l'API
* RestrictedArea.aspx: Page vue par l'utilisateur si par
malheur il suivait un lien vers un contenu d'accès restreint,
à la place d'un code Http 404 ou autre.
Si cet utilisateur est administrateur, la page lui affiche les
rôles ou utilisateurs autorisés à accèder au contenu.
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx:
* RestrictedArea.aspx: Page vue par l'utilisateur si par
malheur il suivait un lien vers un contenu d'accès restreint,
à la place d'un code Http 404 ou autre.
Si cet utilisateur est administrateur, la page lui affiche les
rôles ou utilisateurs autorisés à accèder au contenu.
* AccountController.cs: Evite de mettre à jour un mot de passe
avec des valeures non attendues
* style.css: corrige un mouvement de la disposition au survol
de la souris
* AuthorizeAttribute.cs: enlève la redirection à l'accès
restreint, et fixe pas la même la transmission des données
`Roles` et `Users` de la vue
* AdminController.cs: Evite de supprimer un utilisateur d'un
groupe avec des valeures non attendues
* HomeController.cs: Il n'y avait pas à créer de methode pour
la vue publique de l'accès restreint.
* YavscAjaxHelper.cs: évite d'avoir à convertir en chaine les
valeurs de la vue.
* App.master: Cette page maître affiche encore beaucoup de
billets de blog, on y installe le coteur, de base. Ça changera
quand les blogs auront (enfin) leur page maître dédiée.
* AppAdmin.master: synchronisation avec la page maître
principale (thémes)
* NoLogin.master: synchronisation avec la page maître
principale.(thémes)
* yavsc.rate.js: supprime l'initialisation de tous les type de
cotes depuis le script global.
C'est fait sur les pages qui en ont besoin, et seulement pour
les types de cotes concernés.
* AddUserToRole.ascx: Ce formulaire est maintenant à la fois
opérationel depuis une interface web sans javascript, et à la
Ajax quand Javascript activé.
* UsersInRole.aspx: implémente l'interface utilisateur pour
l'ajout et la suppression d'un utilisateur à un groupe
* Skills.aspx: initialise le coteur js des compétences site
* UserSkills.aspx: initialise le coteur js de compétences
utilisateur
* Web.csproj: un script et des pages d'erreur d'accès, il en
faut une par controlleur
qui restreint quelque de ses accès.
2015-11-19 Paul Schneider <paul@pschneider.fr>
* PayPalController.cs: implements a Paypal controller

@ -133,6 +133,7 @@ namespace Yavsc.Controllers
BuildBackupList (datac);
return View (datac);
}
private void BuildBackupList(DataAccess datac)
{
// build ViewData ["Backups"];
@ -151,16 +152,18 @@ namespace Yavsc.Controllers
/// <param name="rolename">Rolename.</param>
/// <param name="returnUrl">Return URL.</param>
[Authorize(Roles="Admin")]
public ActionResult RemoveFromRole(string username, string rolename, string returnUrl)
public ActionResult RemoveUserFromRole(string username, string rolename, string returnUrl)
{
Roles.RemoveUserFromRole(username,rolename);
if (ModelState.IsValid)
Roles.RemoveUserFromRole(username,rolename);
return Redirect(returnUrl);
}
[Authorize(Roles="Admin")]
public ActionResult AddUserToRole(string username, string rolename, string returnUrl)
{
Roles.AddUsersToRole(new string[] { username } ,rolename);
if (ModelState.IsValid)
Roles.AddUsersToRole(new string[] { username } ,rolename);
return Redirect(returnUrl);
}
/// <summary>

@ -101,10 +101,6 @@ namespace Yavsc.Controllers
return View ();
}
public ActionResult RestrictedArea ()
{
return View ();
}
/// <summary>
/// Contact the specified email, reason and body.
/// </summary>

@ -36,12 +36,12 @@ namespace Yavsc.Helpers
/// <param name="helper">Helper.</param>
/// <param name="message">Message.</param>
/// <param name="click_action">Click action.</param>
public static void Notify(this AjaxHelper helper, string message, string click_action=null) {
public static void Notify(this AjaxHelper helper, object message, string click_action=null) {
if (helper.ViewData ["Notifications"] == null)
helper.ViewData ["Notifications"] = new List<Notification> ();
(helper.ViewData ["Notifications"] as List<Notification>).Add (
new Notification { body = QuoteJavascriptString(message),
new Notification { body = QuoteJavascriptString((string)message),
click_action = click_action } ) ;
}
@ -50,15 +50,21 @@ namespace Yavsc.Helpers
/// </summary>
/// <returns>The javascript string.</returns>
/// <param name="str">String.</param>
public static string QuoteJavascriptString(string str)
public static string QuoteJavascriptString(object str)
{
str = str.Replace ("\n", "\\n");
if (str.Contains ("'"))
if (str.Contains ("\""))
return "'" + str.Replace ("'", "\\'") + "'";
string tmpstr = (string) str;
tmpstr = tmpstr.Replace ("\n", "\\n");
if (tmpstr.Contains ("'"))
if (tmpstr.Contains ("\""))
return "'" + tmpstr.Replace ("'", "\\'") + "'";
else
return "\"" + str + "\"";
return "'" + str + "'";
return "\"" + tmpstr + "\"";
return "'" + tmpstr + "'";
}
public static string JString(this AjaxHelper helper, object str)
{
return QuoteJavascriptString (str);
}
}
}

@ -23,6 +23,9 @@ Page.StyleSheetTheme = (string) Profile.UITheme; %>
<script src="<%=Url.Content("~/Scripts/Prettify/run_prettify.js")%>"></script>
<script type="text/javascript">
var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$(document).ready(function(){
$('[data-type="rate-bill"]').rate({target: 'Blogs/Rate'});
});
</script>
<%=Ajax.GlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>

@ -4,18 +4,14 @@
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
<% Page.Title = ViewState["orgtitle"] + " - " + YavscHelpers.SiteName;
Page.Theme = (string) Profile.UITheme;
Page.StyleSheetTheme = (string) Profile.UITheme;
%>
Page.StyleSheetTheme = (string) Profile.UITheme; %>
<asp:ContentPlaceHolder id="init" runat="server">
</asp:ContentPlaceHolder>
</asp:ContentPlaceHolder>
<head runat="server">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/"+Page.StyleSheetTheme+"/style.css")%>" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/style.css")%>" />
<%= Html.ThemeCSSLinks(Page.StyleSheetTheme,"style")%>
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/font-awesome.css")%>" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/jquery-ui.css")%>" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/prettify.css")%>" />
@ -49,7 +45,7 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$(document).ready(function(){
<% foreach (Notification note in (IEnumerable<Notification>) ViewData ["Notifications"] ) {
if (note.click_action == null) {%> Yavsc.notice(<%=note.body%>); <% }
else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>); <% } %>
else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_action_name%>); <% } %>
<% } %>
});
</script>

@ -4,18 +4,14 @@
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
<% Page.Title = ViewState["orgtitle"] + " - " + YavscHelpers.SiteName;
Page.Theme = (string) Profile.UITheme;
Page.StyleSheetTheme = (string) Profile.UITheme;
%>
Page.StyleSheetTheme = (string) Profile.UITheme; %>
<asp:ContentPlaceHolder id="init" runat="server">
</asp:ContentPlaceHolder>
<head runat="server">
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/"+Page.StyleSheetTheme+"/style.css")%>" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/style.css")%>" />
<%= Html.ThemeCSSLinks(Page.StyleSheetTheme,"style")%>
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/font-awesome.css")%>" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/jquery-ui.css")%>" />
<link rel="stylesheet" href="<%=Url.Content("~/App_Themes/prettify.css")%>" />
@ -27,9 +23,14 @@ Page.StyleSheetTheme = (string) Profile.UITheme;
<script src="<%=Url.Content("~/Scripts/Prettify/run_prettify.js")%>"></script>
<script type="text/javascript">
var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$(document).ready(function(){
$('[data-type="rate-bill"]').rate({target: 'Blogs/Rate'});
});
</script>
<%=Ajax.GlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>

@ -0,0 +1,37 @@

var Admin = (function(){
var self = {};
self.addUserToRole = function (user,role,callback) {
Yavsc.ajax('Account/AddUserToRole',
{ username: user, role: role }, callback );
};
self.removeUserFromRole = function (user,role,callback) {
Yavsc.ajax('Account/RemoveUserFromRole',
{ username: user, role: role }, callback );
}
return self;
})();
(function() {
(function(jQuery) {
return jQuery.widget('Yavsc.decharger', {
options: {
roleName: 'Admin',
},
_create: function() {
var _this = this;
var $bgobj = $(this.element);
// console.log ('Dechargeable:'+$bgobj.text());
$bgobj.click(function() {
var user = $bgobj.text();
Admin.removeUserFromRole(user,_this.options.roleName,
function() {
$bgobj.remove();
});
});
},
});
})(jQuery);
}).call(this);

@ -49,9 +49,3 @@
},
})})(jQuery);
}).call(this);
$(document).ready(function(){
$('[data-type="rate-site-skill"]').rate({target: 'Skill/RateSkill'});
$('[data-type="rate-user-skill"]').rate({target: 'Skill/RateUserSkill'});
$('[data-type="rate-bill"]').rate({target: 'Blogs/Rate'});
});

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -1,18 +1,17 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%= Html.ValidationSummary() %>
<% using(Html.BeginForm("AddUserToRole", "Admin"))
{ %>
<form action="AddUserToRole" method="POST" id="frmAUTR">
<fieldset>
<div id="roleaddedresult"></div>
<% if (ViewData ["UserName"] != null) { %>
<%= Html.Hidden("RoleName",ViewData ["RoleName"]) %>
<% } else { %>
<div>
<label for="UserName" >Utilisateur : </label><input type="text" name="UserName" id="UserName">
<label for="UserName" >Utilisateur : </label>
<div id="Err_model_UserName"></div>
<input type="text" name="UserName" id="UserName">
<%= Html.ValidationMessage("UserName", "*") %>
</div>
<% } %>
<% if (ViewData ["RoleName"] != null) { %>
<%= Html.Hidden("RoleName",ViewData ["RoleName"]) %>
<% } else { %>
@ -22,8 +21,20 @@
<%= Html.ValidationMessage("RoleName", "*") %>
</div>
<% } %>
<%= Html.Hidden("ReturnUrl", Request.Url.PathAndQuery ) %>
<input type="submit">
<script>
$("form").on ('submit', function (e) { return e.preventDefault(); } );
function ajaxSubmit() {
var user = $('#UserName').val();
var role = $('#RoleName').val();
Admin.addUserToRole(user, role,
function () { $('#UserName').val('');
$('[data-type="userlist"]').filter('[data-role='+role+']').each(function() {
$('<li>'+user+'</li>').decharger({roleName: <%= YavscAjaxHelper.QuoteJavascriptString((string)ViewData["RoleName"]) %>}).appendTo(this);
});
} );
return false;
}
</script>
<input type="submit" value="Ajouter l'utilisateur au rôle <%=ViewData ["RoleName"]%>" onclick="return ajaxSubmit();" >
</fieldset>
<% } %>
</form>

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -2,7 +2,16 @@
<asp:Content ContentPlaceHolderID="init" ID="init1" runat="server">
<% ViewState["orgtitle"] = string.Format ( LocalizedText.UsersInRole , Html.Encode(ViewData["RoleName"])); %>
<% Page.Title = ViewState["orgtitle"] + " - " + YavscHelpers.SiteName; %>
</asp:Content>
<asp:Content ContentPlaceHolderID="head" ID="head1" runat="server">
<script src="<%=Url.Content("~/Scripts/yavsc.admin.js")%>"></script>
<script>
$(document).ready(function(){
$('[data-type="userlist"]').children().each(function() {
$(this).decharger({roleName: <%= YavscAjaxHelper.QuoteJavascriptString((string)ViewData["RoleName"]) %>});
});
});
</script>
</asp:Content>
<asp:Content ContentPlaceHolderID="overHeaderOne" ID="header1" runat="server">
<h1><a href="<%= Url.RouteUrl("Default", new { action = "UsersInRole", RoleName = ViewData["RoleName"] } )%>">
@ -11,7 +20,8 @@
</h1>
</asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
<ul class="editablelist userlist">
<ul class="editablelist" data-role="<%=ViewData["RoleName"]%>" data-type="userlist">
<%foreach (string username in (string[]) ViewData["UsersInRole"]){ %>
<li><%= username %></li>
<% } %>

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -2,6 +2,11 @@
<asp:Content ID="headContent" ContentPlaceHolderID="head" runat="server">
<script src="<%=Url.Content("~/Scripts/yavsc.skills.js")%>"></script>
<script>
$(document).ready(function(){
$('[data-type="rate-site-skill"]').rate({target: 'Skill/RateSkill'});
});
</script>
</asp:Content>
<asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server">

@ -2,6 +2,11 @@
<asp:Content ID="headContent" ContentPlaceHolderID="head" runat="server">
<script src="<%=Url.Content("~/Scripts/yavsc.skills.js")%>"></script>
<script>
$(document).ready(function(){
$('[data-type="rate-user-skill"]').rate({target: 'Skill/RateUserSkill'});
});
</script>
</asp:Content>
<asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server">

@ -0,0 +1,13 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEntryCollection>" MasterPageFile="~/Models/App.master"%>
<asp:Content ContentPlaceHolderID="MainContent" ID="MainContentContent" runat="server">
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -3,9 +3,11 @@
Ce contenu est d'accès restreint :<br>
&lt;<%= Html.Encode(ViewData["ControllerName"]) %>/<%= Html.Encode(ViewData["ActionName"]) %>&gt;<br>
<% if (Roles.IsUserInRole("Admin")) { %>
<i>Admin only:</i>
Ci après les tièrces parties autorisée actuellement :<br>
Roles autorisés :<%= Html.Encode(ViewData["Roles"]) %><br>
Roles autorisés : <%= Html.Encode(ViewData["Roles"]) %><br>
Utilisateurs autorisés :<%= Html.Encode(ViewData["Users"]) %><br>
<% } %>
</asp:Content>

@ -498,6 +498,14 @@
<Content Include="Views\PayPal\IPN.aspx" />
<Content Include="Web.Debug.config" />
<Content Include="Web.Lua.config" />
<Content Include="Scripts\yavsc.admin.js" />
<Content Include="Views\FrontOffice\RestrictedArea.aspx" />
<Content Include="Views\Admin\RestrictedArea.aspx" />
<Content Include="Views\Blogs\RestrictedArea.aspx" />
<Content Include="Views\Google\RestrictedArea.aspx" />
<Content Include="Views\FileSystem\RestrictedArea.aspx" />
<Content Include="Views\BackOffice\RestrictedArea.aspx" />
<Content Include="Views\Account\RestrictedArea.aspx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

@ -1,3 +1,9 @@
2015-11-21 Paul Schneider <paul@pschneider.fr>
* UserNameBase.cs: Permet l'usage des espaces dans les noms
d'utilisateurs,
à la création legacy, ou autres usage du nom d'utilisateur.
2015-11-19 Paul Schneider <paul@pschneider.fr>
* YavscModel.csproj: Lua config

@ -31,7 +31,7 @@ namespace Yavsc.Model.RolesAndMembers
/// </summary>
/// <value>The name of the user.</value>
[Localizable(true), Required(ErrorMessage = "S'il vous plait, entrez un nom d'utilisateur")
,Display(ResourceType=typeof(LocalizedText),Name="User_name"),RegularExpression("([a-z]|[A-Z]|[0-9] )+")]
,Display(ResourceType=typeof(LocalizedText),Name="User_name"),RegularExpression(@"^[a-zA-Z .-_#]{1,100}$")]
public string UserName { get; set; }
}

Loading…