asp.net mvc4
simplemembership
ASP.NET MVC4笔记(一) 扩展Simplemembership
using System.Web.Mvc ;
namespace MvcClassManageSystem.ActionFilters
{
public class LogStateFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting ( ActionExecutingContext filterContext )
{
base . OnActionExecuting ( filterContext );
//string controller = filterContext.RouteData.Values["controller"].ToString();
//string action = filterContext.RouteData.Values["action"].ToString();
//System.Diagnostics.Debug.WriteLine("OnAction:" + controller + "/" + action);
if ( WebMatrix . WebData . WebSecurity . IsAuthenticated == true )
{
filterContext . Result = new RedirectToRouteResult ( new System . Web . Routing . RouteValueDictionary ( new { Controller = "Home" , action = "Index" }));
}
}
}
}
public static class WebUtility
{
private static SimpleMembershipProvider membership = ( SimpleMembershipProvider ) Membership . Provider ;
public static void CreateUserAndAccount ( UserProfile userProfile , string Password )
{
WebSecurity . CreateUserAndAccount ( userProfile . UserName , Password , new
{
//TO DO 数据库/模型更改之后别忘记修改此处!!!
ClassId = userProfile . ClassId ,
UserExtraInfo_Phone = userProfile . UserExtraInfo . Phone ,
UserExtraInfo_Gender = userProfile . UserExtraInfo . Gender ,
UserExtraInfo_BirthDay = userProfile . UserExtraInfo . BirthDay ,
UserExtraInfo_UserDesc = userProfile . UserExtraInfo . UserDesc
});
}
public static void DeleteUserAndAccount ( string UserName )
{
membership . DeleteAccount ( UserName );
Roles . RemoveUserFromRoles ( UserName , Roles . GetRolesForUser ( UserName ));
membership . DeleteUser ( UserName , true );
}
public static void ResetPassword ( string UserName , string NewPassword )
{
WebSecurity . ResetPassword ( WebSecurity . GeneratePasswordResetToken ( UserName , 1 ), NewPassword );
}
}
using System.Web.Mvc ;
namespace MvcClassManageSystem.Filters
{
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest ( AuthorizationContext filterContext )
{
base . HandleUnauthorizedRequest ( filterContext );
if ( filterContext . HttpContext . User . Identity . IsAuthenticated )
{
filterContext . Result = new RedirectResult ( "/Account/AccessError" );
}
}
}
}
using System.Data.Entity ;
using System.Linq ;
using System.Web.Security ;
using WebMatrix.WebData ;
namespace MvcClassManageSystem.Models
{
public class InitSecurityDb : DropCreateDatabaseAlways < DBManager >
{
protected override void Seed ( DBManager context )
{
WebSecurity . InitializeDatabaseConnection ( "DefaultConnection" , "UserProfile" , "UserId" , "UserName" , autoCreateTables : true );
var roles = ( SimpleRoleProvider ) Roles . Provider ;
string [] RolesList = new string [] { "Admin" , "Teacher" , "Student" };
foreach ( var item in RolesList )
{
if ( ! roles . RoleExists ( item ))
{
roles . CreateRole ( item );
}
}
//设置初始班级
int ClassIndex = 0 ;
using ( var db = new DBManager ())
{
var ret = db . ClassProfiles . SingleOrDefault ( m => m . ClassName . CompareTo ( "未知班级" ) == 0 );
if ( ret == null )
{
ret = db . ClassProfiles . Add ( new ClassProfile
{
ClassName = "未知班级" ,
Desc = "班级未知或无意义"
});
db . SaveChanges ();
}
ClassIndex = ret . ClassId ;
}
if ( ! WebSecurity . UserExists ( "管理员" ))
{
WebUtility . CreateUserAndAccount ( new UserProfile ()
{
UserName = "管理员" ,
ClassId = ClassIndex ,
UserExtraInfo = new UserExtraInfo ()
{
Phone = "18267912632" ,
Gender = MvcClassManageSystem . Models . Gender . 男 ,
BirthDay = new System . DateTime ( 1993 , 9 , 28 ),
UserDesc = "本站的管理员!"
}
}, "admin" );
System . Web . Security . Roles . AddUserToRole ( "管理员" , "Admin" );
}
}
}
}
protected void Application_Start ()
{
Database . SetInitializer < DBManager > ( new InitSecurityDb ());
DBManager db = new DBManager ();
db . Database . Initialize ( true );
if ( ! WebSecurity . Initialized )
{
WebSecurity . InitializeDatabaseConnection ( "DefaultConnection" , "UserProfile" , "UserId" , "UserName" , autoCreateTables : true );
}
AreaRegistration . RegisterAllAreas ();
WebApiConfig . Register ( GlobalConfiguration . Configuration );
FilterConfig . RegisterGlobalFilters ( GlobalFilters . Filters );
RouteConfig . RegisterRoutes ( RouteTable . Routes );
BundleConfig . RegisterBundles ( BundleTable . Bundles );
AuthConfig . RegisterAuth ();
}