Ответ 1
public static class HtmlExtensions
{
private class RoleContainer : IDisposable
{
private readonly TextWriter _writer;
public RoleContainer(TextWriter writer)
{
_writer = writer;
}
public void Dispose()
{
_writer.Write("</div>");
}
}
public static IDisposable RoleAccess(this HtmlHelper htmlHelper, string role)
{
var user = htmlHelper.ViewContext.HttpContext.User;
var style = "display:none;";
if (user.IsInRole(role))
{
style = "display:block;";
}
var writer = htmlHelper.ViewContext.Writer;
writer.WriteLine("<div class=\"role_Content_General_Website\" style=\"" + style + "\">");
return new RoleContainer(writer);
}
}
а затем вы можете использовать его следующим образом:
@using(Html.RoleAccess("Administrator"))
{
...
}
Очевидно, вы можете адаптировать аргументы помощника в соответствии с вашими требованиями:
public static IDisposable RoleAccess(
this HtmlHelper helper,
UserInfo user,
RoleAccessType role
)
{
var style = "display:none;";
if (user.HasAccess(role))
{
style = "display:block;";
}
var writer = htmlHelper.ViewContext.Writer;
writer.WriteLine("<div class=\"role_" + role.ToString() + "\" style=\"" + style + "\">");
return new RoleContainer(writer);
}