[Mono-dev] [PATCH] Fix Roles.IsUserInRole and enhance WebTest Framework

Tiaan Geldenhuys tagdev at gmail.com
Thu Feb 11 04:16:33 EST 2010


The attached patch is a fix for System.Web.Security.Roles.IsUserInRole to
prevent ASP.NET MVC errors like the one shown at the bottom, which happens
when a user hasn't logged on and requests public pages with sections that
are dynamically removed using role-based access-restrictions.  It now
behaves more like .NET that does not throw an exception.

Writing a test for this fix was a bit of a challenge -- it's no wonder there
is not any working test for the Roles class yet.  :)  To address this, the
MonoTests.SystemWeb.Framework.WebTest class was updated slightly to make it
possible to write self-contained tests for cases where you might want more
control over the resources that are copied to your hosted web application,
such as when creating Web.config files dynamically.  The test for the
current fix also serves as an example of how this can be done.  If these
changes are approved, one can expand on this for all the other Roles
methods.

Please review and commit.

Thank you,
Tiaan.

NOTE: The patch files can be used without changes on both trunk and the 2.6
branch.

---------------

[System.Web.HttpUnhandledException]: Exception of type
'System.Web.HttpUnhandledException' was thrown.
  at System.Web.UI.Page.ProcessException (System.Exception e) [0x00000] in
<filename unknown>:0 
  at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context)
[0x00000] in <filename unknown>:0 
  at System.Web.HttpApplication+<Pipeline>c__Iterator5.MoveNext () [0x00000]
in <filename unknown>:0 
  at System.Web.HttpApplication.Tick () [0x00000] in <filename unknown>:0 
[System.Web.HttpUnhandledException]: Exception of type
'System.Web.HttpUnhandledException' was thrown.
  at System.Web.UI.Page.ProcessException (System.Exception e) [0x00000] in
<filename unknown>:0 
  at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context)
[0x00000] in <filename unknown>:0 
  at System.Web.Mvc.ViewPage.RenderView (System.Web.Mvc.ViewContext
viewContext) [0x00000] in <filename unknown>:0 
  at System.Web.Mvc.WebFormView.RenderViewPage (System.Web.Mvc.ViewContext
context, System.Web.Mvc.ViewPage page) [0x00000] in <filename unknown>:0 
  at System.Web.Mvc.WebFormView.Render (System.Web.Mvc.ViewContext
viewContext, System.IO.TextWriter writer) [0x00000] in <filename unknown>:0 
  at System.Web.Mvc.ViewResultBase.ExecuteResult
(System.Web.Mvc.ControllerContext context) [0x00000] in <filename unknown>:0

  at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult
(System.Web.Mvc.ControllerContext controllerContext,
System.Web.Mvc.ActionResult actionResult) [0x00000] in <filename unknown>:0 
  at
System.Web.Mvc.ControllerActionInvoker+<InvokeActionResultWithFilters>c__Ano
nStoreyE.<>m__11 () [0x00000] in <filename unknown>:0 
  at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter
(IResultFilter filter, System.Web.Mvc.ResultExecutingContext preContext,
System.Func`1 continuation) [0x00000] in <filename unknown>:0 
[System.ArgumentException]: Username cannot be empty.
  at SomeRoleProvider.IsUserInRole (System.String username, System.String
roleName) [0x00000] in <filename unknown>:0 
  at System.Web.Security.Roles.IsUserInRole (System.String rolename)
[0x00000] in <filename unknown>:0 
  at ASP.views_shared_site_master.__RenderTree (System.Web.UI.HtmlTextWriter
__output, System.Web.UI.Control parameterContainer) [0x00000] in <filename
unknown>:0 
  at System.Web.UI.Control.RenderChildren (System.Web.UI.HtmlTextWriter
writer) [0x00000] in <filename unknown>:0 
  at System.Web.UI.Control.Render (System.Web.UI.HtmlTextWriter writer)
[0x00000] in <filename unknown>:0 
  at System.Web.UI.Control.RenderControl (System.Web.UI.HtmlTextWriter
writer) [0x00000] in <filename unknown>:0 
  at System.Web.UI.Control.RenderChildren (System.Web.UI.HtmlTextWriter
writer) [0x00000] in <filename unknown>:0 
  at System.Web.UI.Control.Render (System.Web.UI.HtmlTextWriter writer)
[0x00000] in <filename unknown>:0 
  at System.Web.UI.Page.Render (System.Web.UI.HtmlTextWriter writer)
[0x00000] in <filename unknown>:0 
  at System.Web.Mvc.ViewPage.Render (System.Web.UI.HtmlTextWriter writer)
[0x00000] in <filename unknown>:0 
  at System.Web.UI.Control.RenderControl (System.Web.UI.HtmlTextWriter
writer) [0x00000] in <filename unknown>:0 
  at System.Web.UI.Page.RenderPage () [0x00000] in <filename unknown>:0 
  at System.Web.UI.Page.InternalProcessRequest () [0x00000] in <filename
unknown>:0 
  at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context)
[0x00000] in <filename unknown>:0

===============



-------------- next part --------------
A non-text attachment was scrubbed...
Name: Roles-IsUserInRole_trunk.patch
Type: application/octet-stream
Size: 754 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20100211/7e360efd/attachment-0003.obj 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: RolesTest-IsUserInRole_trunk.patch
Type: application/octet-stream
Size: 4604 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20100211/7e360efd/attachment-0004.obj 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: NunitWeb-WebTest_trunk.patch
Type: application/octet-stream
Size: 4477 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20100211/7e360efd/attachment-0005.obj 


More information about the Mono-devel-list mailing list