ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...
ASP.NET -- WebForm -- Cookie的使用
ASP.NET -- WebForm --? Cookie的使用
Cookie是存在瀏覽器內(nèi)存或磁盤上。
1. Test3.aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test3.aspx.cs" Inherits="Test3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"><title></title> </head> <body><form id="form1" runat="server"><div><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div></form> </body> </html>2. Test3.aspx.cs文件
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;public partial class Test3 : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){if (Request.Cookies["myProject"] != null){//如果瀏覽器端發(fā)送給服務(wù)器端的Cookie有'myProject',則顯示'myProject'的Cookie值Label1.Text = Request.Cookies["myProject"].Value;}else{//如果瀏覽器端發(fā)送給服務(wù)器端的Cookie沒有'myProject',則設(shè)置'myProject'的Cookie值Response.Cookies["myProject"].Value = "Test3";//沒有設(shè)置過期時間的cookie是存在瀏覽器內(nèi)存中的,瀏覽器關(guān)閉就會消失//設(shè)置了過期時間的cookie,關(guān)閉瀏覽器也不消失,是存在瀏覽器所使用的磁盤文件上的//設(shè)置cookie的有效期為一天, 該cookie一天后就會失效//Response.Cookies["myProject"].Expires = DateTime.Now.AddDays(1);}}} }?
3. 實現(xiàn)結(jié)果
(1) 首次訪問頁面,沒有cookie值,則設(shè)置cookie的值,服務(wù)器通過響應(yīng)報文把要設(shè)置的cookie發(fā)送給瀏覽器。
?
(2) 再次訪問頁面時。瀏覽器會將cookie放在發(fā)送報文中,發(fā)送給服務(wù)器端。服務(wù)器端可將接收到的cookie值顯示出來。
?
?
?
應(yīng)用程序權(quán)限設(shè)計
我們在開發(fā)系統(tǒng)的時候,經(jīng)常會遇到系統(tǒng)需要權(quán)限控制,而權(quán)限的控制程度不同有不同的設(shè)計方案。
?
這種方案是最常見也是比較簡單的方案,不過通常有這種設(shè)計已經(jīng)夠了,所以微軟就設(shè)計出這種方案的通用做法,這種方案對于每一個操作不做控制,只是在程序中根據(jù)角色對是否具有操作的權(quán)限進(jìn)行控制;這里我們就不做詳述
?
這種模式下每一個操作都在數(shù)據(jù)庫中有記錄,用戶是否擁有該操作的權(quán)限也在數(shù)據(jù)庫中有記錄,結(jié)構(gòu)如下:
?
但是如果直接使用上面的設(shè)計,會導(dǎo)致數(shù)據(jù)庫中的UserAction這張表數(shù)據(jù)量非常大,所以我們需要進(jìn)一步設(shè)計提高效率,請看方案3
?
?
如上圖所示,我們在添加了Role,和RoleACTION表,這樣子就可以減少USERACTION中的記錄,并且使設(shè)計更靈活一點。
但是這種方案在用戶需求的考驗之下也可能顯得不夠靈活夠用,例如當(dāng)用戶要求臨時給某位普通員工某操作權(quán)限時,我們就需要新增加一種新的用戶角色,但是這種用戶角色是不必要的,因為它只是一種臨時的角色,如果添加一種角色還需要在收回此普通員工權(quán)限時刪除此角色,我們需要設(shè)計一種更合適的結(jié)構(gòu)來滿足用戶對權(quán)限設(shè)置的要求。
?
?
我們可以看到在上圖中添加了UserAction表,使用此表來添加特殊用戶的權(quán)限,改表中有一個字段HasPermission可以決定用戶是否有某種操作的權(quán)限,改表中記錄的權(quán)限的優(yōu)先級要高于UserRole中記錄的用戶權(quán)限。這樣在應(yīng)用程序中我們就需要通過UserRole和UserAction兩張表中的記錄判斷權(quán)限。
到這兒呢并不算完,有可能用戶還會給出這樣的需求:對于某一種action所操作的對象某一些記錄會有權(quán)限,而對于其他的記錄沒有權(quán)限,比如說一個內(nèi)容管理系統(tǒng),對于某一些頻道某個用戶有修改的權(quán)限,而對于另外一些頻道沒有修改的權(quán)限,這時候我們需要設(shè)計更復(fù)雜的權(quán)限機(jī)制。
?
?
對于這樣的需求我們就需要對每一種不同的資源創(chuàng)建一張權(quán)限表,在上圖中對Content和Channel兩種資源分別創(chuàng)建了UserActionContent和UserActionChannel表用來定義用戶對某條記錄是否有權(quán)限;這種設(shè)計是可以滿足用戶需求的但是不是很經(jīng)濟(jì),UserActionChannel和UserActionContent中的記錄會很多,而在實際的應(yīng)用中并非需要記錄所有的記錄的權(quán)限信息,有時候可能只是一種規(guī)則,比如說對于根Channel什么級別的人有權(quán)限;這時候呢我們就可以定義些規(guī)則來判斷用戶權(quán)限,下面就是這種設(shè)計。
?
?
在這種設(shè)計下角色的概念已經(jīng)沒有了,只需要Rule在程序中的類中定義用戶是否有操作某種對象的權(quán)限。
以上只是分析思路,如果有不對的地方,請大家指正。
微博:http://weibo.com/yukaizhao?推薦?牧童*紅杏*墻權(quán)限設(shè)計文章匯總
?
如何設(shè)計網(wǎng)站權(quán)限系統(tǒng)?
https://www.zhihu.com/question/20313385/answer/118095995
我的轉(zhuǎn)載:https://www.cnblogs.com/hao-1234-1234/p/9850967.html
應(yīng)用程序權(quán)限設(shè)計
http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html#!comments
我的轉(zhuǎn)載?https://www.cnblogs.com/hao-1234-1234/p/8976332.html
我的sql語句實現(xiàn):https://www.cnblogs.com/hao-1234-1234/p/8976643.html
現(xiàn)在有了Powdesigner可以自動生成sql了,那時候不知道這個工具。
擴(kuò)展RBAC用戶角色權(quán)限設(shè)計方案
https://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html
我的轉(zhuǎn)載:https://www.cnblogs.com/hao-1234-1234/p/9850910.html
java用戶角色權(quán)限設(shè)計
http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html
我的轉(zhuǎn)載:https://www.cnblogs.com/hao-1234-1234/p/8976582.html
用戶、角色和權(quán)限開發(fā)
https://blog.csdn.net/u010004317/article/details/53996757
我的轉(zhuǎn)載:https://www.cnblogs.com/hao-1234-1234/p/8976603.html
?
?
?
?
asp.net后臺管理系統(tǒng)-登陸模塊-是否自動登陸
FormsAuthentication.SetAuthCookie(UserFlag, createPersistentCookie);
createPersistentCookie是否永久保存cookie
https://www.cnblogs.com/joeylee/p/3521131.html
?
?
?
C# 讀寫文件摘要
主要參考地址:https://www.cnblogs.com/chenyangsocool/p/7511161.html
?
首先下載微軟提供的工具:DsoFile? (微軟官網(wǎng)下載傳送門)
?
讀寫自定義摘要信息(需要注意,自定義摘要信息只能添加一次,再添加會報錯,所以如果對應(yīng)的name已經(jīng)存在,只能采用修改的方式添加)
/// <summary>/// 檢測該文件屬性中是否已經(jīng)存在指定的自定義屬性key/// </summary>/// <param name="file">本地的文件</param>/// <param name="key">自定義的key</param>/// <returns>存在key返回對應(yīng)的值,不存在key返回string.empty</returns>private static string PropContains(string file, string key){OleDocumentProperties odp = new OleDocumentProperties();odp.Open(file);try{//由于不能直接foreach,所以用了for循環(huán)for (int i = 0; i < odp.CustomProperties.Count; i++){if (odp.CustomProperties[i].Name == key){return odp.CustomProperties[i].get_Value();}}}catch (Exception ex){LogUtil.Error($"{file} 文件處理出錯 ex:{ ex.ToString()}");}finally{odp.Close();}return string.Empty;}/// <summary>/// 修改自定義屬性的屬性值(存在則修改,不存在則添加)/// </summary>/// <param name="file">本地的文件</param>/// <param name="key">自定義的key</param>/// <returns>修改成功返回true,不成功返回false</returns>private static void PropChange(string file, string key, string value){OleDocumentProperties odp = new OleDocumentProperties();odp.Open(file);try{//由于不能直接foreach,所以用了for循環(huán)for (int i = 0; i < odp.CustomProperties.Count; i++){if (odp.CustomProperties[i].Name == key){//為指定自定義屬性修改值odp.CustomProperties[i].set_Value(value);odp.Save();return;}}//不存在指定屬性,則添加odp.CustomProperties.Add(key, value);odp.Save();}catch (Exception ex){LogUtil.Error($"{file} 文件處理出錯 ex:{ ex.ToString()}");}finally{odp.Close();}}?
除開自定義摘要,還有很多自帶的摘要信息可以直接使用,如下:
[Guid("58968145-CF02-4341-995F-2EE093F6ABA3")][TypeLibType(4288)]public interface SummaryProperties{[DispId(131073)]string Title { get; set; }[DispId(131074)]string Subject { get; set; }[DispId(131075)]string Author { get; set; }[DispId(131076)]string Keywords { get; set; }[DispId(131077)]string Comments { get; set; }[DispId(131078)]string Template { get; }[DispId(131079)]string LastSavedBy { get; set; }[DispId(131080)]string RevisionNumber { get; }[DispId(131081)]int TotalEditTime { get; }[DispId(131082)]dynamic DateLastPrinted { get; }[DispId(131083)]dynamic DateCreated { get; }[DispId(131084)]dynamic DateLastSaved { get; }[DispId(131085)]int PageCount { get; }[DispId(131086)]int WordCount { get; }[DispId(131087)]int CharacterCount { get; }[DispId(131088)]dynamic Thumbnail { get; }[DispId(131089)]string ApplicationName { get; }[DispId(131090)]int DocumentSecurity { get; }[DispId(131091)]string Category { get; set; }[DispId(131092)]string PresentationFormat { get; }[DispId(131093)]int ByteCount { get; }[DispId(131094)]int LineCount { get; }[DispId(131095)]int ParagraphCount { get; }[DispId(131096)]int SlideCount { get; }[DispId(131097)]int NoteCount { get; }[DispId(131098)]int HiddenSlideCount { get; }[DispId(131099)]int MultimediaClipCount { get; }[DispId(131100)]string Manager { get; set; }[DispId(131101)]string Company { get; set; }[DispId(131102)]int CharacterCountWithSpaces { get; }[DispId(131103)]bool SharedDocument { get; }[DispId(131104)]string Version { get; }[DispId(131105)]dynamic DigitalSignature { get; }}?
?
?
?
#2樓?2018-11-20 17:29?~雨落憂傷~?? 5. 中?User?
Channel
Content
Action 都是基礎(chǔ)表
UserActionContent和UserActionChannel表 是關(guān)系表
Action 好理解 相當(dāng)于 某一模塊
Channel 和 Content 又相當(dāng)于什么呢? 支持(0)反對(0) 回復(fù)引用 #3樓[樓主]?2018-11-20 17:46?hao_1234_1234?? @?~雨落憂傷~
誰實話5、6部分我也沒看懂。我把content理解為文件,UserActionContent關(guān)系表控制權(quán)限這個人可以通過ActionID對應(yīng)的方法訪問ContentID對應(yīng)的文件,但不能訪問其它文件。 支持(0)反對(0) 回復(fù)引用 #4樓[樓主]?2018-11-20 17:49?hao_1234_1234?? @?~雨落憂傷~
UserActionChannel 同理 支持(0)反對(0) 回復(fù)引用 #5樓[樓主]?2018-11-20 17:52?hao_1234_1234?? @?~雨落憂傷~
我覺得實際應(yīng)用中,User表和UserActionContent表之間還可以加一個角色role表,變成 user --userRole(關(guān)系表)--role--roleActionContent。 因為一般不會單獨對每一個人配置權(quán)限,因為這樣UserActionConten關(guān)系表數(shù)據(jù)量會非常大。 支持(0)反對(0) 回復(fù)引用 #6樓[樓主]?2018-11-20 17:58?hao_1234_1234?? @?~雨落憂傷~
我覺得5與3的核心區(qū)別是:關(guān)系表(決定權(quán)限的表)由兩種因素共同確定。而3這種經(jīng)典角色表,只由一種因素決定。 支持(0)反對(0) 修改刪除 #7樓?2018-11-20 18:01?~雨落憂傷~?? @?hao_1234_1234
那 5 為什么不直接用3個表
用戶表 關(guān)系表 權(quán)限表 支持(0)反對(0) 修改刪除 #8樓?2018-11-20 18:02?~雨落憂傷~?? @?hao_1234_1234
這樣設(shè)計 是不是 資源表有多少個 不固定
Channel
Content
UserActionContent
UserActionChannel表
不固定的 支持(0)反對(0) 回復(fù)引用 #9樓[樓主]?2018-11-20 18:07?hao_1234_1234?? @?~雨落憂傷~
我同意你的看法,原作者可能是為了未來拓展的方便。 當(dāng)另一個Content2要和Action組合起來控制某個權(quán)限時,可以很方面的加表解決。 支持(0)反對(0) 修改刪除 #10樓?2018-11-20 18:12?~雨落憂傷~?? 我覺得3,4就已經(jīng)很好的滿足需求了
如果在項目中再通過加表 來處理權(quán)限
未免有些麻煩 表的復(fù)雜度也會增加 支持(0)反對(0) 回復(fù)引用 #11樓[樓主]?2018-11-20 18:16?hao_1234_1234?? @?~雨落憂傷~
權(quán)限設(shè)計的復(fù)雜度取決于用戶需求的復(fù)雜度,如果用戶有這種需求,我們必須想辦法滿足需求。例如:5還可以和4結(jié)合使用,替換掉4中的UserAction,就可以應(yīng)對復(fù)雜的需求變化。 支持(0)反對(0) 修改刪除 #12樓?2018-11-20 18:17?~雨落憂傷~?? @?hao_1234_1234
越復(fù)雜 項目不可控程度越高
?
我們可以看到在上圖中添加了UserAction表,使用此表來添加特殊用戶的權(quán)限,改表中有一個字段HasPermission可以決定用戶是否有某種操作的權(quán)限,改表中記錄的權(quán)限的優(yōu)先級要高于UserRole中記錄的用戶權(quán)限。這樣在應(yīng)用程序中我們就需要通過UserRole和UserAction兩張表中的記錄判斷權(quán)限。
到這兒呢并不算完,有可能用戶還會給出這樣的需求:對于某一種action所操作的對象某一些記錄會有權(quán)限,而對于其他的記錄沒有權(quán)限,比如說一個內(nèi)容管理系統(tǒng),對于某一些頻道某個用戶有修改的權(quán)限,而對于另外一些頻道沒有修改的權(quán)限,這時候我們需要設(shè)計更復(fù)雜的權(quán)限機(jī)制。
?
?
對于這樣的需求我們就需要對每一種不同的資源創(chuàng)建一張權(quán)限表,在上圖中對Content和Channel兩種資源分別創(chuàng)建了UserActionContent和UserActionChannel表用來定義用戶對某條記錄是否有權(quán)限;這種設(shè)計是可以滿足用戶需求的但是不是很經(jīng)濟(jì),UserActionChannel和UserActionContent中的記錄會很多,而在實際的應(yīng)用中并非需要記錄所有的記錄的權(quán)限信息,有時候可能只是一種規(guī)則,比如說對于根Channel什么級別的人有權(quán)限;這時候呢我們就可以定義些規(guī)則來判斷用戶權(quán)限,下面就是這種設(shè)計。
總結(jié)
以上是生活随笔為你收集整理的ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5 入门详解
- 下一篇: C#枚举类型用户标志位的代码