欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

權(quán)限管理工具的使用方法

系統(tǒng) 1654 0
function StorePage() { d=document; t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():''); void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes')); keyit.focus(); }

權(quán)限管理工具的使用

在當(dāng)今商業(yè)軟件的開(kāi)發(fā)中有一項(xiàng)功能是必不可少的 , 這就是權(quán)限工具 , 想必大家對(duì)權(quán)限這個(gè)詞不會(huì)太陌生 , 應(yīng)為在我們身邊的很多軟件上都用到了權(quán)限 , 比如說(shuō)最常見(jiàn)的 Windows 操作系統(tǒng),就使用到了權(quán)限,但是在實(shí)際的開(kāi)發(fā)過(guò)程中,權(quán)限是個(gè)相當(dāng)麻煩的東西。大家都在尋找一種簡(jiǎn)易的權(quán)限管理方式,這個(gè)時(shí)候我們發(fā)現(xiàn)了 CG . Security 這個(gè)組件,這是一個(gè)非常優(yōu)秀的功能權(quán)限管理組件,它可以讓我們非常簡(jiǎn)便的來(lái)控制軟件的權(quán)限。

使用 CG . Security 你可以任意添加刪除權(quán)限、角色和權(quán)限。可以通過(guò)大多數(shù)的權(quán)限管理方式給用戶(hù)賦予角色或直接給用戶(hù)賦予權(quán)限。

好了,簡(jiǎn)短介紹了 CG . Security 的功能后下面將為大家來(lái)講解下該組件的用法。在講解之前請(qǐng)首先到 http://www.codeproject.com/csharp/CGSecurity.asp 上下載該組件。

下面的講解會(huì)分兩個(gè)部分:

第一部分將講解該類(lèi)庫(kù)中常見(jiàn)的一些方法屬性的用法。第二部分通過(guò)一個(gè)小 DEMO ,給大家一個(gè)感性的認(rèn)識(shí),讓大家了解在實(shí)際開(kāi)發(fā)中如何使用 CG . Security

一、 類(lèi)庫(kù)的常用方法

在這個(gè)組件中用了六個(gè)類(lèi)來(lái)分別實(shí)現(xiàn)了用戶(hù)管理、權(quán)限管理和角色管理。

UserManager (用戶(hù)管理類(lèi)):該類(lèi)提供了添加、刪除和查找用戶(hù)的方法。

RoleManager (角色管理類(lèi)):該類(lèi)提供了添加、刪除和查找角色的方法。

RightManager (權(quán)限管理類(lèi)):該類(lèi)提供了添加、刪除和修改權(quán)限的方法。

UserRightManager (用戶(hù)權(quán)限管理類(lèi)):該類(lèi)的作用是使用戶(hù)和權(quán)限關(guān)聯(lián),也提供了增、刪、查的功能,使用此類(lèi),可以為某個(gè)用戶(hù)直接賦予權(quán)限。

UserRoleManager (用戶(hù)角色管理類(lèi)):該類(lèi)和上面的 UserRightManager 相似,也提供了相似的功能,所不同的是該類(lèi)是把用戶(hù)和角色進(jìn)行關(guān)聯(lián)。

RoleRightManager (角色權(quán)限管理類(lèi))該類(lèi)提供了角色和權(quán)限關(guān)聯(lián)的功能。

在介紹了上述六個(gè)類(lèi)后,下面還要為大家介紹在實(shí)際開(kāi)發(fā)中會(huì)用到的一個(gè)類(lèi)。

SecurityManager.cs 類(lèi),該類(lèi)提供了登陸驗(yàn)證( Authenticate )和獲得該用戶(hù)權(quán)限列表( EffectiveRights )的功能。使用該類(lèi)我們可以判斷用戶(hù)的合法性并且能得到當(dāng)前用戶(hù)的權(quán)限列表。

上面介紹了權(quán)限管理組件中幾個(gè)常見(jiàn)類(lèi)的功能。讓大家對(duì)權(quán)限管理組件有一個(gè)全面的了解,下面的一部分我將一步一步做出一個(gè)小 DEMO 讓大家對(duì)這個(gè)組件有一個(gè)感性的認(rèn)識(shí)。 OK ,偶們進(jìn)入下一環(huán)節(jié)吧。

二、 做一個(gè)小 Demo 來(lái)演示如何使用這個(gè)權(quán)限工具

一、 做一個(gè)小 Demo 來(lái)演示如何使用這個(gè)權(quán)限工具

1. 我們?cè)谶@個(gè) Demo 中會(huì)實(shí)現(xiàn)數(shù)據(jù)權(quán)限和功能權(quán)限兩種權(quán)限管理功能。首先我們要從網(wǎng)上下載該組件,該組件可以從 http://www.codeproject.com/csharp/CGSecurity.asp 上找到,在下載后在 bin/release 目錄下找到 CG.Security.dll 文件。

2 .新建一個(gè)解決方案 CG.SecurityTest

3 .然后在 Form1 上添加一個(gè) mainMenu, 然后在上面添家 4 個(gè)子項(xiàng),把他們分別命名為 mlTest1, mlTest2, mlTest3, mlTest4, 然后把他們的 Visible 設(shè)置為 false

4 .當(dāng)添加完菜單后我們還要添加一個(gè) dataGrid 3 個(gè)按鈕。

dataGrid name 改為 dgView 3 個(gè)按鈕分別命名為 btnAllUser btnTest1 btnView

然后把 btnTest1 Enabled 屬性設(shè)置為 false

5 .上面添加的是我們的主界面,下面我們還要添加一個(gè)用來(lái)輸入用戶(hù)名密碼等信息的輔助界面,在工程上添加一個(gè)新的 Windows 窗體,然后命名為 FormValue 。當(dāng)窗體新建好后在窗體上新建 textbox button 一樣兩個(gè)。 textbox 分別命名為 txtName txtPwd button 分別命名為 btnOK btnCancel 。并且把 btnOK dialogresult 屬性設(shè)置為 OK btnCancel dialogresult 屬性設(shè)置為 Cancel 。窗體設(shè)置完后我們?cè)诖a中添加兩個(gè)屬性

public string UID

{

get { return txtName . Text . Trim();}

}

public string PWD

{

get { return txtPWD . Text . Trim();}

}

Ok 經(jīng)過(guò)上述三個(gè)步驟之后我們的界面工作就完成了,下面我們將開(kāi)始實(shí)現(xiàn)他們的具體功能 .

6 首先在項(xiàng)目種引用 CG.Security.dll 這個(gè)組件。在 FORM1 上導(dǎo)入 CG . Security CG . Security . Principal 這兩個(gè)命名空間。

using CG . Security;

using CG . Security . Principal;

:)這一步是必不可少的。

7. 在添加完引用后。我們還有一個(gè)東西要準(zhǔn)備-配置文件,那么首先我們添加一個(gè)新的 App.Config ,然后 Copy 下列代碼到 App.Config 中:

<? xml version ="1.0" encoding ="utf-8" ?>

< configuration >

< configSections >

< sectionGroup name ="CG.Security.Data">

< section name ="runtimeSetup" type ="CG.Security.Data.Configuration.DataSettingsHandler, CG.Security" />

</ sectionGroup >

</ configSections >

< CG.Security.Data >

< runtimeSetup defaultSection ="Access">

< installedAssembly >

< add

sectionName ="Access"

targetAssembly ="CG.Security"

targetNamespace ="CG.Security.Data.Access"

connectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\tempfile\CGSecurityDemo\bin\Debug\security.mdb"

/>

</ installedAssembly >

</ runtimeSetup >

</ CG.Security.Data >

</ configuration >

上述的配置文件大家可以看到是連接數(shù)據(jù)庫(kù)的一些信息,他使用到了 CG.Security.Data.Configuration.DataSettingsHandler 這個(gè)類(lèi)來(lái)讀取數(shù)據(jù)庫(kù)信息,在配置文件中我們可以很清楚的看到連接字符串,該配置文件使用 Oledb 連接到指定目錄下的 Access 數(shù)據(jù)庫(kù)。應(yīng)為我是放在 F 盤(pán)的,這里大家要根據(jù)自己數(shù)據(jù)庫(kù)存放的實(shí)際位置來(lái)。當(dāng)一切配置都完成了的時(shí)候,我們就開(kāi)始實(shí)現(xiàn)具體的代碼了。

8 .進(jìn)入應(yīng)用程序第一步肯定就是要驗(yàn)證當(dāng)前用戶(hù)的合法性啦, ok 那么我們首先從窗體的加載事件開(kāi)始講起:

首先我們要在定義一個(gè)全局的 string 數(shù)組 str

然后在 FormLoad 事件中添加如下的代碼。

// 實(shí)例化登陸窗體

FormValue fv = new FormValue();

if (fv . ShowDialog( this ) != DialogResult . OK)

{

this . Close();

return ;

}

// 驗(yàn)證用戶(hù)的 ID Password

if ( ! SecurityManager . Authenticate(fv . UID,fv . PWD))

{

MessageBox . Show( " 用戶(hù)名或密碼不正確! " );

this . Close();

return ;

}

System . AppDomain . CurrentDomain . SetThreadPrincipal(

new CustomPrincipal( new CustomIdentity(fv . UID))

);

OleDbDataReader dataread = (OleDbDataReader)UserManager . FindByUserName(fv . UID);

dataread . Read();

str = SecurityManager . EffectiveRights(dataread . GetInt32( 0 ));

// 循環(huán)每個(gè)權(quán)限

foreach ( string strSingle in str)

{

switch (strSingle)

{

case "Test 1" :

miTest1 . Visible = true ;

btnTest1 . Enabled = true ;

break ;

case "Test 2" :

miTest2 . Visible = true ;

break ;

case "Test 3" :

miTest3 . Visible = true ;

break ;

case "Test 4" :

miTest4 . Visible = true ;

break ;

}

}

大家看到上述代碼就是一個(gè)權(quán)限管理的典型應(yīng)用,我將為大家一步一步講解這段代碼。

首先我們可以看到這樣一段代碼

FormValue fv = new FormValue();

if (fv . ShowDialog( this ) != DialogResult . OK)

{

this . Close();

return ;

}

該代碼是首先實(shí)例化一個(gè)輸入用戶(hù)名密碼的窗體,然后判斷用戶(hù)是否點(diǎn)擊了 OK ,如果用戶(hù)沒(méi)有點(diǎn)擊 OK 則退出程序。

if ( ! SecurityManager . Authenticate(fv . UID,fv . PWD))

{

MessageBox . Show( " 用戶(hù)名或密碼不正確! " );

this . Close();

return ;

}

這段代碼就是精華之所在了, SecurityManager 類(lèi)是一個(gè)驗(yàn)證類(lèi),在這里我們調(diào)用了它的 Authenticate 方法,該方法接受兩個(gè)參數(shù),用戶(hù)名和密碼。并返回一個(gè) BOOL 值,借此我們可以判斷該用戶(hù)的用戶(hù)名密碼是否正確。

System . AppDomain . CurrentDomain . SetThreadPrincipal(

new CustomPrincipal( new CustomIdentity(fv . UID))

);

該句的意思是把某一用戶(hù)綁定到線程的主對(duì)象上,在這里我們把當(dāng)前登陸的用戶(hù) ID 傳進(jìn)去,那么在整個(gè)程序中都可以知道當(dāng)前登陸的用戶(hù)。

OleDbDataReader dataread = (OleDbDataReader)UserManager . FindByUserName(fv . UID);

dataread . Read();

str = SecurityManager . EffectiveRights(dataread . GetInt32( 0 ));

上面一段代碼就是講如何使用權(quán)限了。首先我們調(diào)用 UserManager.FindByUserName 方法得到一個(gè) DataReader 對(duì)象(該方法是通過(guò)用戶(hù)名來(lái)查找用戶(hù)的信息),然后讀取 DataReader 對(duì)象取得當(dāng)前用戶(hù)的 ID

最后調(diào)用 SecurityManager . EffectiveRights 方法列出該用戶(hù)擁有的所有權(quán)限保存在一個(gè)字符串?dāng)?shù)組里面。

// 循環(huán)每個(gè)權(quán)限

foreach ( string strSingle in str)

{

switch (strSingle)

{

case "Test 1" :

miTest1 . Visible = true ;

btnTest1 . Enabled = true ;

break ;

case "Test 2" :

miTest2 . Visible = true ;

break ;

case "Test 3" :

miTest3 . Visible = true ;

break ;

case "Test 4" :

miTest4 . Visible = true ;

break ;

}

}

在這里我們剛才得到的權(quán)限數(shù)組,然后在判斷當(dāng)該用戶(hù)是否擁有某個(gè)功能權(quán)限,例如 Test 1 權(quán)限的時(shí)候就讓他使用 Test1 菜單和 btnTest1 按鈕等。

這個(gè)時(shí)候大家可以編譯程序,拿 admin 用戶(hù)進(jìn)系統(tǒng)和拿 user 進(jìn)系統(tǒng)有什么不同之處呢?呵呵,大家可以看大使用 User 進(jìn)去的時(shí)候菜單 Test1 Test4 不見(jiàn)了,還有就是 btnTest1 按鈕變成灰色的了。

9. 上面,我們講述了怎么使用功能權(quán)限,接下來(lái),我將利用一個(gè)主從表的示例程序來(lái)為大家講解如何使用數(shù)據(jù)權(quán)限,我們最后要實(shí)現(xiàn)的效果是擁有 Test4 權(quán)限的用戶(hù)可以即看到主表又看到從表,反之則只能看到主表。

好了,首先我們?cè)? bin/debug 目錄下添加一個(gè) orders.mdb 數(shù)據(jù)庫(kù),然后在里面分別建 2 張表 orders orderlist

Orders 表字段如下

ordered 自動(dòng)編號(hào)

orderType 文本 (訂單類(lèi)別)

orderTimer 日期時(shí)間 (發(fā)生時(shí)間)

orderlist 表字段如下

orderListID 自動(dòng)編號(hào)

orderid 數(shù)字 (主表的 ID

ProdName 文本 (商品名稱(chēng))

Count 數(shù)字 (數(shù)量)

當(dāng)大家把上面的表格式建立好了以后把 orders orderlist 表的 orderid 值進(jìn)行關(guān)聯(lián)。

上述步驟做完了后就往數(shù)據(jù)庫(kù)里面添加幾條數(shù)據(jù)。

OK 數(shù)據(jù)庫(kù)準(zhǔn)備好了,我們也該看看怎么來(lái)實(shí)現(xiàn)了,在 btnView click 事件中添加如下的代碼:

OleDbConnection con = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=orders.mdb" );

con . Open();

OleDbDataAdapter da = new OleDbDataAdapter( "select * from orders" ,con);

DataSet ds = new DataSet();

da . Fill(ds, "<place w:st="on">Main</place>" );

dgView . DataSource = ds . Tables[ 0 ];

dgView . TableStyles . Clear();

DataGridTableStyle dts = new DataGridTableStyle();

DataGridTextBoxColumn dcstype = new DataGridTextBoxColumn();

DataGridTextBoxColumn dcsName = new DataGridTextBoxColumn();

dcstype . MappingName = "orderType" ;

dcstype . HeaderText = " 類(lèi)型 " ;

dcsName . MappingName = "orderTimer" ;

dcsName . HeaderText = " 時(shí)間 " ;

dts . GridColumnStyles . Add(dcstype);

dts . GridColumnStyles . Add(dcsName);

dts . MappingName = ds . Tables[ 0 ] . TableName;

dgView . TableStyles . Add(dts);

foreach ( string stra in str)

{

// 如果當(dāng)用戶(hù)擁有該權(quán)限的時(shí)候可以看到從表里面的內(nèi)容

if (stra == "Test 4" )

{

OleDbDataAdapter daList = new OleDbDataAdapter( "select * from orderList where orderid in(select orderid from orders)" ,con);

daList . Fill(ds, "List" );

ds . Relations . Add(ds . Tables[ 0 ] . Columns[ "orderid" ],ds . Tables[ 1 ] . Columns[ "orderid" ]);

DataGridTableStyle dtL = new DataGridTableStyle();

DataGridTextBoxColumn dclName = new DataGridTextBoxColumn();

DataGridTextBoxColumn dclCount = new DataGridTextBoxColumn();

dclName . MappingName = "prodName" ;

dclName . HeaderText = " 商品名 " ;

dclCount . MappingName = "count" ;

dclCount . HeaderText = " 數(shù)量 " ;

dtL . GridColumnStyles . Add(dclName);

dtL . GridColumnStyles . Add(dclCount);

dtL . MappingName = ds . Tables[ 1 ] . TableName;

dgView . TableStyles . Add(dtL);

break ;

}

}

上面的代碼很簡(jiǎn)單,都是常用的數(shù)據(jù)庫(kù)操作,我要講解的是便利循環(huán)的地方。

foreach ( string stra in str)

{

// 如果當(dāng)用戶(hù)擁有該權(quán)限的時(shí)候可以看到從表里面的內(nèi)容

if (stra == "Test 4" )

{

OleDbDataAdapter daList = new OleDbDataAdapter( "select * from orderList where orderid in(select orderid from orders)" ,con);

daList . Fill(ds, "List" );

ds . Relations . Add(ds . Tables[ 0 ] . Columns[ "orderid" ],ds . Tables[ 1 ] . Columns[ "orderid" ]);

……

}

<span

分享到:
評(píng)論

權(quán)限管理工具的使用方法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 精品在线视频一区 | 李宗瑞国产福利视频一区 | 99精彩视频 | 欧美大胆一级视频 | 亚洲视频一区在线观看 | 色网站在线视频 | 电视剧全部免费观看 | 亚洲日本乱码在线观看 | 久久一二三区 | 国产成人精品午夜 | 斗罗破苍穹在线观看免费完整观看 | 午夜影视网| asian gaysex| 男人的午夜影院 | 久久久久久久国产 | 日韩1区 | 日韩精品视频美在线精品视频 | 国偷自产av一区二区三区 | 国产精品久久久999 午夜免费 | 特级做a爰片毛片免费看 | 日本高清视频在线播放 | 午夜影库 | 五月综合久久 | 久久中文字幕久久久久91 | 久久我们这里只有精品国产4 | 艹艹艹逼 | 日本夜爽爽一区二区三区 | 亚洲欧美色欧另类欧 | 欧美洲视频在线观看 | 免费免费视频片在线观看 | 欧美激情网 | 男女在线观看啪网站 | 99综合网 | 精品一区二区三区免费站 | 91日本在线观看亚洲精品 | 蜜桃91麻豆 | 国产农村妇女毛片精品久久麻豆 | 久久精品中文字幕 | 婷婷在线网站 | 亚洲情综合五月天 | www日韩免费高清视频 |