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.
This commit is contained in:
2015-11-21 00:36:40 +01:00
parent 029a80e2c4
commit 77eed811f5
30 changed files with 348 additions and 63 deletions

View File

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

View File

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

View File

@ -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 } );
}
}

View File

@ -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";
}

View File

@ -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);
}

View File

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

View File

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

View File

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

View File

@ -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);
}
}
}

Binary file not shown.

View File

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

View File

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

View File

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

View File

@ -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);

View File

@ -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'});
});

View File

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

View File

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

View File

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

View File

@ -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>
<% } %>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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; }
}