2009-10-29 114 views
4

我是ASP.NET MVC的新手,需要提供有关如何实现以下内容的建议。实现ASP.NET MVC的自定义登录

该网站是一个大量使用的网站,内部大约有200个用户(intranet)。我们使用表单身份验证打击SQL Server数据库(不是Windows集成)。

一些操作受到保护,一些可以被任何人查看,一些可以被两者查看 - 所以如果这些用户是登录用户,他们会从数据库中看到他们的东西,否则他们会看到一个临时配置文件 - 很像StackOverflow。

我该如何去实现这种情况下的安全模型?我可以重用ASP.NET MVC中的现有框架并使用授权过滤器吗?

有没有我可以用作参考的在线文章?

+0

你为什么不使用Windows集成? – RichardOD 2009-10-29 14:21:55

回答

0

page's User object拥有一个IsAutheticated(User.Identity.IsAuthenticated)属性,它会告诉您用户是否已通过身份验证。这与显示或隐藏数据/控件(或ASP .Net LoginView control)的条件语句相结合,可以让你做你想做的事。另外,您可以使用ASP .Net's role provider(或者自行定制提供商)来进一步定义您的用户可以根据您分配给他们的角色访问/执行的操作。

4

我有同样的问题,因为我想用自定义的用户数据库实现asp.net成员资格,我的解决方案是覆盖默认的aspnet成员资格提供程序来管理用户日志和aspnet角色提供程序来管理用户角色。 例如,我的定义成员资格提供看起来某事像这样

namespace Entities 
{ 
    public class VEMembership : MembershipProvider 
    { 
     public override bool ValidateUser(string username, string password) 
     { 
      // your logic to validate user 
      // return false if not qualified, other wise true 
     } 
    } 
} 

,然后在网络配置文件,你只需要您的默认成员资格提供程序添加到:

<membership defaultProvider="VEMembership"> 
    <providers> 
     <clear/> 
     <add name="VEMembership" 
      type="Entities.VEMembership" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="false" 
      requiresUniqueEmail="false" 
      passwordFormat="Hashed" 
      maxInvalidPasswordAttempts="5" 
      minRequiredPasswordLength="6" 
      minRequiredNonalphanumericCharacters="0" 
      passwordAttemptWindow="10" 
      passwordStrengthRegularExpression="" 
      connectionString="VEConnectionString"/> 
    </providers> 
</membership> 

有很多文章关于谷歌搜索定制aspnet会员提供商,如果你需要任何帮助做到这一点。 希望这有助于

+0

这就是一个很好的例子!正是我所追求的!如何在ValidateUser中获得与底层数据库的连接?问题是我必须在会话对象中维护一些数据(它们的配置文件位于List中)。我可以访问一个会话并将它们放在那里,当授权在一个重写功能中结束时吗? – 2009-11-02 03:46:54

+0

其实,我是否可以从SqlMemberShipProvider派生出来,而只是实现ValidateUser呢? – 2009-11-02 03:48:51

+0

对于您不想覆盖任何内容的任何函数,只需使用基本函数即可,例如: public override bool UnlockUser(string username) { return base.UnlockUser(username); } – tuanvt 2009-11-02 10:31:13