I would like to show some links only to authenticated users in an mvc web application.

  • I use the template for an mvc web application in Visual Studio 2008 that came with the beta release of mvc.
  • I use forms authentication.
  • I would like to add something like the following to an existing view:
<a href="/Account/ChangePassword">Change password</a>

and only show the link to users who are logged in.

What is the simplest way to do that? I would like something as simple as security trimming of the web.sitemap that I have tried with web forms. (Can that be used with mvc? Or is it only for web forms?)

+3  A: 

The following should work. You'll also need to do something similar in the controller action for this in case the user inputs the URL by hand in their browser. Or, as you say, you could restrict access to the action in the web.config.

 <% if (HttpContext.Current.Request.IsAuthenticated) { %>
    <a href="/Account/ChangePassword">Change password</a>
 <% } %>
+3  A: 

<%if (Page.User.Identity.IsAuthenticated){ %>

show change password link

<% } else { %>

show login link

<% } %>

Trevor de Koekkoek
+2  A: 

You can simply it to just this:

<% if (Request.IsAuthenticated) { %> Change password <% } %>

Todd Smith
+3  A: 

You could build a custom SiteMapProvider like this one:

Building an ASP.NET MVC sitemap provider with security trimming

Jorge Vargas