亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

基于mvc5+ef6+Bootstrap框架實現身份驗證和權限管理

2020-01-24 01:04:31
字體:
來源:轉載
供稿:網友

近和朋友完成了一個大單子架構是mvc5+ef6+Bootstrap,用的是vs2015,數據庫是sql server2014。朋友做的架構,項目完成后覺得很多值得我學習,在這里總結下一些心得。

創建項目一開始刪掉App_Start目錄下的IdentityConfig.cs和Startup.Auth.cs文件;清空Modle文件夾,Controller文件夾和相應的View; 刪除目錄下的ApplicationInsights.config文件和Startup.cs文件

修改web.config文件(添加<add key="owin:AutomaticAppStartup" value="false"/>不使用Startup.cs文件來啟動項目)

<appSettings><add key="webpages:Version" value="3.0.0.0" /><add key="webpages:Enabled" value="false" /><add key="ClientValidationEnabled" value="true" /><add key="UnobtrusiveJavaScriptEnabled" value="true" /><add key="owin:AutomaticAppStartup" value="false"/> <!--去掉創建項目初的Startup.cs文件的設置--></appSettings>

(不用他們是因為自帶的這些內容太冗余)

去掉冗余內容正式開始,首先介紹數據庫這一塊,數據庫我們是配置的可以手動生成和修改的

1.在項目目錄想創建Migrations文件夾,里面添加Configuration.cs文件

internal sealed class Configuration : DbMigrationsConfiguration<AccountContext>{public Configuration(){AutomaticMigrationsEnabled = true;ContextKey = "UserProject.DAL.AccountContext";}protected override void Seed(AccountContext context){//base.Seed(context);}}

在Modle文件夾下添加AccountContext.cs文件

public class AccountContext:DbContext{public AccountContext():base("AccountContext") {}public DbSet<User> Users { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();}}<connectionStrings><add name="AccountContext" connectionString="Data Source=(LocalDb)/MSSQLLocalDB;AttachDbFilename=|DataDirectory|/UserProject.mdf;Initial Catalog=UserProject;Integrated Security=True" providerName="System.Data.SqlClient" /></connectionStrings>

然后 使用vs2015里面的工具-NuGet包管理器-程序包管理控制平臺

輸入add-migration Initial 按回車,在輸入update-database按回車。在App_Data文件夾下就會看到AccountContext數據庫了。

2.在Modle文件夾下添加User.css文件

public class User{public int ID { get; set; }public string UserName { get; set; }public string Password { get; set; }public Role Role { get; set; }}public enum Role//角色枚舉{ 管理員 = 0, 員工 = 1, 經理 = 2, 總經理 = 3, 董事長 = 4 }

在ViewModle文件夾中添加Account.cs文件

public class Account{[Required]public string Name { get; set; }[Required]public string Password { get; set; }public string RePassword { get; set; }}

這里推薦創建BaseController之后的Controller就繼承它來使用

public class BaseController : Controller{public string UserName => User.Identity.Name;public AccountContext db = new AccountContext();private User _userInfo = null;public User CurrentUserInfo{get{if (_userInfo == null){var user = db.Users.SingleOrDefault(u => u.UserName == UserName);//此處為了不每次訪問用戶表可以做一個靜態類,里面存放用戶表信息._userInfo = user == null ? null : new User(){ID = user.ID,UserName = user.UserName,Role = user.Role};}return _userInfo;}}    //驗證角色:獲取Action的CustomAttributes,過濾角色protected override void OnActionExecuting(ActionExecutingContext filterContext){base.OnActionExecuting(filterContext);var authRoleAtt = filterContext.ActionDescriptor.GetCustomAttributes(false).SingleOrDefault(att => att is AuthorizeRoleAttribute) as AuthorizeRoleAttribute;if (authRoleAtt == null && CurrentUserInfo != null)return;if (!authRoleAtt.Roles.Contains(CurrentUserInfo.Role)){filterContext.Result = View("NoPermission", "_Layout", "您沒有權限訪問此功能!");}}//這里是記log用protected override void OnActionExecuted(ActionExecutedContext filterContext){base.OnActionExecuted(filterContext);var msg = $"用戶: {CurrentUserInfo?.UserName}, 鏈接: {Request.Url}";if (Request.HttpMethod == "POST")msg += $", 數據: {HttpUtility.UrlDecode(Request.Form.ToString())}";//Log.Debug(msg);}}

AdminController繼承BaseController

[Authorize]public ActionResult Index(){return View(db.Users.ToList());}[Authorize, AuthorizeRole(Role.管理員)]public ActionResult Details(int? id){if (id == null){return new HttpStatusCodeResult(HttpStatusCode.BadRequest);}User user = db.Users.Find(id);if (user == null){return HttpNotFound();}return View(user);}

登錄頁面:

@model UserProject.ViewModels.Account@{ViewBag.Title = "Login";}@using (Html.BeginForm("Login", "Admin",FormMethod.Post, new { @class = "form-horizontal", role = "form" })) {@Html.AntiForgeryToken()<hr />@Html.ValidationSummary(true, "", new { @class = "text-danger" })<div class="form-group">@Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label" })<div class="col-md-10">@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })@Html.ValidationMessageFor(m => m.Name, "", new { @class = "text-danger" })</div></div><div class="form-group">@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })<div class="col-md-10">@Html.PasswordFor(m => m.Password, new { @class = "form-control" })@Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })</div></div><div class="form-group"><div class="col-md-offset-2 col-md-10"><input type="submit" value="登錄" class="btn btn-primary" /></div></div>}

登錄的Action:

[AllowAnonymous]public ActionResult Login(){return View();}[HttpPost, AllowAnonymous]public ActionResult Login(Account model){if (ModelState.IsValid){var user = db.Users.SingleOrDefault(t => t.UserName == model.Name && t.Password == model.Password);if (user != null){FormsAuthentication.SetAuthCookie(model.Name, false);//將用戶名放入Cookie中return RedirectToAction("Index");}else{ModelState.AddModelError("Name", "用戶名不存在!");}}return View(model);}public ActionResult LogOff(){FormsAuthentication.SignOut();return RedirectToAction("Login");}

按照以上方式 訪問Details這個Action的時候必須是管理員角色。

以上所述是小編給大家介紹的基于mvc5+ef6+Bootstrap框架實現身份驗證和權限管理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久999| 欧美大片免费看| 久热爱精品视频线路一| 亚洲图中文字幕| 亚洲视频免费一区| 国产日韩专区在线| 国产视频综合在线| 欧美疯狂xxxx大交乱88av| 91成人在线观看国产| 精品久久中文字幕| 亚洲欧美另类人妖| 日韩在线资源网| 日韩久久免费视频| 日韩最新在线视频| 国产97色在线| 黄色精品一区二区| 欧美电影免费观看高清完整| 北条麻妃一区二区在线观看| 日韩最新中文字幕电影免费看| 国内精品在线一区| 国产精品三级美女白浆呻吟| 亚洲成人网久久久| 日韩国产一区三区| 国产狼人综合免费视频| 亚洲成人av中文字幕| 国产精品羞羞答答| 日韩中文字幕在线看| 韩国福利视频一区| 亚洲码在线观看| 国产亚洲成精品久久| 中文字幕欧美日韩va免费视频| 亚洲区中文字幕| 亚洲小视频在线观看| 亚洲女人被黑人巨大进入| 91精品视频网站| 日韩视频欧美视频| 日韩大片免费观看视频播放| 日韩av资源在线播放| 成人久久一区二区三区| 久久久久久综合网天天| 91精品国产综合久久久久久蜜臀| 中文国产成人精品| 色狠狠av一区二区三区香蕉蜜桃| 欧美激情2020午夜免费观看| 欧美激情一区二区久久久| 国产精品亚洲аv天堂网| www.日韩视频| 伊人男人综合视频网| 黄色成人在线免费| 欧美另类极品videosbest最新版本| 亚洲欧美在线免费| 亚洲欧美制服另类日韩| 日韩精品视频在线观看免费| 亚洲欧美国产一区二区三区| 亚洲男人的天堂在线| 全亚洲最色的网站在线观看| 亚洲精品动漫久久久久| 日韩国产欧美区| 在线看日韩av| 国产精品扒开腿做| 日本欧美精品在线| 国产精品丝袜久久久久久不卡| 7777kkkk成人观看| 国产精品久久精品| 中文字幕欧美精品在线| 九色91av视频| 中文字幕在线观看日韩| 日本精品一区二区三区在线| 日韩在线观看免费全集电视剧网站| 夜夜嗨av色一区二区不卡| 国模视频一区二区| 久久久久这里只有精品| 欧美精品videos另类日本| 成人久久一区二区| 国产精品福利在线| 亚洲欧美日韩爽爽影院| 久久久人成影片一区二区三区观看| 精品无人区太爽高潮在线播放| 精品亚洲va在线va天堂资源站| 日韩在线观看av| 91免费的视频在线播放| 国产91精品网站| 国产一区二区三区视频免费| 亚洲国产成人久久| 亚洲女人被黑人巨大进入al| 国产精品香蕉av| 欧美性猛交xxxx久久久| 亚洲中国色老太| 亚洲专区在线视频| 日本精品视频在线播放| 国产精品wwwwww| 亚洲第一精品福利| 久久影视免费观看| 欧美成人精品不卡视频在线观看| 欧美怡春院一区二区三区| 92版电视剧仙鹤神针在线观看| 日韩暖暖在线视频| 日韩精品福利在线| 欧美国产日韩一区二区在线观看| 欧美综合第一页| 69av视频在线播放| 欧美大荫蒂xxx| 国产精品91一区| 欧美在线激情视频| 69久久夜色精品国产7777| 久99久在线视频| 91在线中文字幕| 亚洲福利精品在线| 亚洲最大av网| 色中色综合影院手机版在线观看| 亚洲精品av在线播放| 欧洲一区二区视频| 另类专区欧美制服同性| 一区二区三区黄色| 国产精品99久久久久久白浆小说| 色狠狠久久aa北条麻妃| 亚洲欧美日韩一区在线| 欧美成人高清视频| 成人免费福利视频| 黑人精品xxx一区一二区| 国产精品爽黄69| 国产美女高潮久久白浆| 精品网站999www| 国产suv精品一区二区| 97国产在线视频| 亚洲xxx视频| 欧美激情亚洲视频| 欧美大奶子在线| 91成人国产在线观看| 欧美大片免费看| 欧美黑人性生活视频| 日韩电影大片中文字幕| 亚洲成人网av| 2019亚洲男人天堂| 久久中文字幕视频| 日韩电影免费在线观看中文字幕| 精品人伦一区二区三区蜜桃网站| 亚洲最大av网| 中文精品99久久国产香蕉| 国产欧美日韩精品专区| 日韩www在线| 亚洲欧美综合v| 精品国产999| 97香蕉超级碰碰久久免费的优势| 久久国产精品久久久久| 欧美老妇交乱视频| 57pao成人国产永久免费| 91久久精品一区| 国产成人在线一区二区| 精品欧美激情精品一区| 成人精品网站在线观看| 国产成人免费av电影| 九九精品在线播放| 正在播放亚洲1区| 久久久免费高清电视剧观看| 91精品免费久久久久久久久| 亚洲aa在线观看| 国产一区红桃视频| 狠狠操狠狠色综合网| 亚洲国产欧美一区二区三区久久| 国产欧美日韩中文字幕在线| 日韩国产在线看| 亚洲色图在线观看| 国产91精品久|