最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個(gè)基于Asp.Net MVC的權(quán)限方案

 更新時(shí)間:2010年02月25日 09:22:12   作者:  
最近這段時(shí)間博客園有幾位同學(xué)在探討通用的權(quán)限方案,偶閑來無事,也來湊湊熱鬧,下面簡(jiǎn)單說一下我的簡(jiǎn)單解決方案,基于AOP的。由于使用了Asp.Net MVC 開發(fā),可能需要先對(duì)MVC有些了解,思路都是差不多的。
1.數(shù)據(jù)結(jié)構(gòu)
2009-06-15_221050
Mad_Popedom為權(quán)限表,Control記錄控制器名,Action記錄動(dòng)作名。
Mad_Role為角色表。

2.權(quán)限控制的實(shí)現(xiàn)
此處使用比較簡(jiǎn)單AOP方式,用MVC的Filter實(shí)現(xiàn),代碼如下

復(fù)制代碼 代碼如下:

using System.Collections.Generic;
using System.Web.Mvc;
using Madnet.Model.MadAdmin;
using Madnet.BLL.MadAdmin;

namespace Madnet.Controllers.MadAdmin
{
public class SupportFilterAttribute : ActionFilterAttribute
{
private bool _IsLogin = true;
/// <summary>
/// 是否需要登錄
/// </summary>
public bool IsLogin
{
set
{
_IsLogin = value;
}
get
{
if (System.Configuration.ConfigurationManager.AppSettings["IsLogin"] != null)
{
bool.TryParse(System.Configuration.ConfigurationManager.AppSettings["IsLogin"].ToString(), out _IsLogin);
}
return _IsLogin;
}
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string controllerName = (string)filterContext.RouteData.Values["controller"];
string actionName = (string)filterContext.RouteData.Values["action"];

if (IsLogin && filterContext.HttpContext.Session["Login_User"] == null)
{
filterContext.HttpContext.Response.Redirect(new UrlHelper(filterContext.RequestContext).Action("Login", "Default"));
filterContext.Result = new EmptyResult();
}
else if (IsLogin && filterContext.HttpContext.Session["Login_User"] != null)
{
Mad_User user = filterContext.HttpContext.Session["Login_User"] as Mad_User;
if (!user.is_super)
{
if (!GetPopedom(user).Exists(p => p.Controller_Name == controllerName.ToLower() && p.Action_Name == actionName.ToLower()))
{
filterContext.HttpContext.Response.Write("沒有權(quán)限");
filterContext.Result = new EmptyResult();
}

}
}

}
/// <summary>
/// 獲取當(dāng)前用戶所有有權(quán)限執(zhí)行的動(dòng)作
/// </summary>
/// <returns></returns>
public List<Atmodel> GetPopedom(Mad_User user)
{
List<Atmodel> ats = new List<Atmodel>();
List<Mad_Popedom> pops = Mad_PopedomBLL.GetPopedombyUser(user.user_id);
foreach (Mad_Popedom pop in pops)
{
ats.Add(new AtModel() { Controller_Name = pop.Control, Action_Name = pop.Action });
}
return ats;
}

}
}

解釋一下,上面的代碼就是在執(zhí)行前,先獲取登錄用戶可以運(yùn)行的Controller-Action,然后和當(dāng)前需要執(zhí)行的Controller-Action比較,如存在,即通過,否則為沒有權(quán)限執(zhí)行。

3.為動(dòng)作添加權(quán)限
為簡(jiǎn)單起見,對(duì)于Controller層我是獨(dú)立出來一個(gè)類庫(kù)的,好處是等會(huì)為角色添加權(quán)限的時(shí)候我們不需要手動(dòng)輸入,只要反射dll就可以了。
2009-06-15_222811
如圖所示,凡需要權(quán)限控制的函數(shù),只需要添加[SupportFilter]特性就可以了,當(dāng)然這種方式只能控制到Action級(jí)。

4.為角色額添加權(quán)限
這個(gè)比較簡(jiǎn)單,只需要把角色和權(quán)限關(guān)聯(lián)起來就可以了,這里我是用反射Controller層dll實(shí)現(xiàn)。
Web.config
2009-06-15_223514
Global.asax.cs
2009-06-16_004727
Madnet.Controllers.Test即為Controller層的dll
2009-06-15_223759
Test為Controller名,index為Action名,選擇role2可以訪問的Action,提交到數(shù)據(jù)庫(kù)即可。此圖表示role2擁有Test1Controller的訪問權(quán)限,但是沒有Test2Controller,Test3Controller的訪問權(quán)限。

5.結(jié)束
上面4步即已完成基本的權(quán)限控制??梢栽诖嘶A(chǔ)上加上用戶組,用戶,菜單等管理,可實(shí)現(xiàn)”用戶-角色-權(quán)限”的自由組合,一個(gè)簡(jiǎn)單的通用后臺(tái)大概就是這樣了。
t2

相關(guān)文章

  • ASP.NET中的參數(shù)與特殊類型和特性

    ASP.NET中的參數(shù)與特殊類型和特性

    這篇文章主要介紹了ASP.NET中的參數(shù)與特殊類型和特性,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-06-06
  • ASP.NET筆記之Calender的使用說明

    ASP.NET筆記之Calender的使用說明

    在Calender中,所有可選擇的符號(hào)會(huì)顯示下劃線,這是因?yàn)樗鼈冊(cè)跒g覽器都會(huì)呈現(xiàn)為鏈接。如果讓用戶可以選擇某天、月、周,必須設(shè)置SelectionMode屬性
    2013-04-04
  • ASP.NET MVC視圖尋址

    ASP.NET MVC視圖尋址

    這篇文章介紹了ASP.NET MVC視圖尋址的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • .NET8實(shí)現(xiàn)PDF合并的示例代碼

    .NET8實(shí)現(xiàn)PDF合并的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用.NET8實(shí)現(xiàn)PDF合并的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • .NET 刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法

    .NET 刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法

    頁(yè)面上按鈕是服務(wù)器控件,現(xiàn)在刷新頁(yè)面要防止按鈕事件重復(fù)執(zhí)行。這篇文章給大家?guī)砹?net刷新頁(yè)面防止表單二次提交的實(shí)現(xiàn)方法,非常不錯(cuò),感興趣的朋友一起看看吧
    2016-09-09
  • 獲取Repeter的Item和ItemIndex/CommandArgument實(shí)現(xiàn)思路與代碼

    獲取Repeter的Item和ItemIndex/CommandArgument實(shí)現(xiàn)思路與代碼

    Repeater控件,放在ItemTemplate內(nèi)的銨鈕OnClick之后,獲取Repeater的Item,ItemIndex,CommandArgument,CommandName以及綁定的字段值附演示動(dòng)畫感興趣的朋友可以了解下
    2013-01-01
  • .NET實(shí)現(xiàn)工資管理系統(tǒng)

    .NET實(shí)現(xiàn)工資管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了.NET實(shí)現(xiàn)工資管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • ASP.NET MVC 導(dǎo)出Word報(bào)表

    ASP.NET MVC 導(dǎo)出Word報(bào)表

    本文主要介紹了ASP.NET MVC 導(dǎo)出Word報(bào)表的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • VsCode之使用WebView通信詳解

    VsCode之使用WebView通信詳解

    這篇文章主要介紹了VsCode之使用WebView通信詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • aspx中的mysql操作類sqldatasource使用示例分享

    aspx中的mysql操作類sqldatasource使用示例分享

    服務(wù)器裝了mysql odbc驅(qū)動(dòng),想在那個(gè)iis上操作另一個(gè)服務(wù)器的mysql,找到個(gè).net的sqldatasource類可以操作mysql,下在把使用方法分享一下
    2014-01-01

最新評(píng)論

靖江市| 大化| 信宜市| 全南县| 姚安县| 北川| 大港区| 新沂市| 牟定县| 扶风县| 泽库县| 普格县| 同心县| 于田县| 克拉玛依市| 娱乐| 元谋县| 万盛区| 安顺市| 定陶县| 诏安县| 泊头市| 中卫市| 松滋市| 衡水市| 江油市| 元阳县| 通州市| 奈曼旗| 蓝田县| 思南县| 吉林省| 绥江县| 曲阜市| 昭苏县| 永丰县| 申扎县| 富裕县| 东乌| 宁波市| 长武县|