ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...
ASP.NET -- WebForm -- Cookie的使用
ASP.NET -- WebForm --? Cookie的使用
Cookie是存在瀏覽器內存或磁盤上。
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){//如果瀏覽器端發送給服務器端的Cookie有'myProject',則顯示'myProject'的Cookie值Label1.Text = Request.Cookies["myProject"].Value;}else{//如果瀏覽器端發送給服務器端的Cookie沒有'myProject',則設置'myProject'的Cookie值Response.Cookies["myProject"].Value = "Test3";//沒有設置過期時間的cookie是存在瀏覽器內存中的,瀏覽器關閉就會消失//設置了過期時間的cookie,關閉瀏覽器也不消失,是存在瀏覽器所使用的磁盤文件上的//設置cookie的有效期為一天, 該cookie一天后就會失效//Response.Cookies["myProject"].Expires = DateTime.Now.AddDays(1);}}} }?
3. 實現結果
(1) 首次訪問頁面,沒有cookie值,則設置cookie的值,服務器通過響應報文把要設置的cookie發送給瀏覽器。
?
(2) 再次訪問頁面時。瀏覽器會將cookie放在發送報文中,發送給服務器端。服務器端可將接收到的cookie值顯示出來。
?
?
?
應用程序權限設計
我們在開發系統的時候,經常會遇到系統需要權限控制,而權限的控制程度不同有不同的設計方案。
?
這種方案是最常見也是比較簡單的方案,不過通常有這種設計已經夠了,所以微軟就設計出這種方案的通用做法,這種方案對于每一個操作不做控制,只是在程序中根據角色對是否具有操作的權限進行控制;這里我們就不做詳述
?
這種模式下每一個操作都在數據庫中有記錄,用戶是否擁有該操作的權限也在數據庫中有記錄,結構如下:
?
但是如果直接使用上面的設計,會導致數據庫中的UserAction這張表數據量非常大,所以我們需要進一步設計提高效率,請看方案3
?
?
如上圖所示,我們在添加了Role,和RoleACTION表,這樣子就可以減少USERACTION中的記錄,并且使設計更靈活一點。
但是這種方案在用戶需求的考驗之下也可能顯得不夠靈活夠用,例如當用戶要求臨時給某位普通員工某操作權限時,我們就需要新增加一種新的用戶角色,但是這種用戶角色是不必要的,因為它只是一種臨時的角色,如果添加一種角色還需要在收回此普通員工權限時刪除此角色,我們需要設計一種更合適的結構來滿足用戶對權限設置的要求。
?
?
我們可以看到在上圖中添加了UserAction表,使用此表來添加特殊用戶的權限,改表中有一個字段HasPermission可以決定用戶是否有某種操作的權限,改表中記錄的權限的優先級要高于UserRole中記錄的用戶權限。這樣在應用程序中我們就需要通過UserRole和UserAction兩張表中的記錄判斷權限。
到這兒呢并不算完,有可能用戶還會給出這樣的需求:對于某一種action所操作的對象某一些記錄會有權限,而對于其他的記錄沒有權限,比如說一個內容管理系統,對于某一些頻道某個用戶有修改的權限,而對于另外一些頻道沒有修改的權限,這時候我們需要設計更復雜的權限機制。
?
?
對于這樣的需求我們就需要對每一種不同的資源創建一張權限表,在上圖中對Content和Channel兩種資源分別創建了UserActionContent和UserActionChannel表用來定義用戶對某條記錄是否有權限;這種設計是可以滿足用戶需求的但是不是很經濟,UserActionChannel和UserActionContent中的記錄會很多,而在實際的應用中并非需要記錄所有的記錄的權限信息,有時候可能只是一種規則,比如說對于根Channel什么級別的人有權限;這時候呢我們就可以定義些規則來判斷用戶權限,下面就是這種設計。
?
?
在這種設計下角色的概念已經沒有了,只需要Rule在程序中的類中定義用戶是否有操作某種對象的權限。
以上只是分析思路,如果有不對的地方,請大家指正。
微博:http://weibo.com/yukaizhao?推薦?牧童*紅杏*墻權限設計文章匯總
?
如何設計網站權限系統?
https://www.zhihu.com/question/20313385/answer/118095995
我的轉載:https://www.cnblogs.com/hao-1234-1234/p/9850967.html
應用程序權限設計
http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html#!comments
我的轉載?https://www.cnblogs.com/hao-1234-1234/p/8976332.html
我的sql語句實現:https://www.cnblogs.com/hao-1234-1234/p/8976643.html
現在有了Powdesigner可以自動生成sql了,那時候不知道這個工具。
擴展RBAC用戶角色權限設計方案
https://www.cnblogs.com/zwq194/archive/2011/03/07/1974821.html
我的轉載:https://www.cnblogs.com/hao-1234-1234/p/9850910.html
java用戶角色權限設計
http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html
我的轉載:https://www.cnblogs.com/hao-1234-1234/p/8976582.html
用戶、角色和權限開發
https://blog.csdn.net/u010004317/article/details/53996757
我的轉載:https://www.cnblogs.com/hao-1234-1234/p/8976603.html
?
?
?
?
asp.net后臺管理系統-登陸模塊-是否自動登陸
FormsAuthentication.SetAuthCookie(UserFlag, createPersistentCookie);
createPersistentCookie是否永久保存cookie
https://www.cnblogs.com/joeylee/p/3521131.html
?
?
?
C# 讀寫文件摘要
主要參考地址:https://www.cnblogs.com/chenyangsocool/p/7511161.html
?
首先下載微軟提供的工具:DsoFile? (微軟官網下載傳送門)
?
讀寫自定義摘要信息(需要注意,自定義摘要信息只能添加一次,再添加會報錯,所以如果對應的name已經存在,只能采用修改的方式添加)
/// <summary>/// 檢測該文件屬性中是否已經存在指定的自定義屬性key/// </summary>/// <param name="file">本地的文件</param>/// <param name="key">自定義的key</param>/// <returns>存在key返回對應的值,不存在key返回string.empty</returns>private static string PropContains(string file, string key){OleDocumentProperties odp = new OleDocumentProperties();odp.Open(file);try{//由于不能直接foreach,所以用了for循環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循環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 都是基礎表
UserActionContent和UserActionChannel表 是關系表
Action 好理解 相當于 某一模塊
Channel 和 Content 又相當于什么呢? 支持(0)反對(0) 回復引用 #3樓[樓主]?2018-11-20 17:46?hao_1234_1234?? @?~雨落憂傷~
誰實話5、6部分我也沒看懂。我把content理解為文件,UserActionContent關系表控制權限這個人可以通過ActionID對應的方法訪問ContentID對應的文件,但不能訪問其它文件。 支持(0)反對(0) 回復引用 #4樓[樓主]?2018-11-20 17:49?hao_1234_1234?? @?~雨落憂傷~
UserActionChannel 同理 支持(0)反對(0) 回復引用 #5樓[樓主]?2018-11-20 17:52?hao_1234_1234?? @?~雨落憂傷~
我覺得實際應用中,User表和UserActionContent表之間還可以加一個角色role表,變成 user --userRole(關系表)--role--roleActionContent。 因為一般不會單獨對每一個人配置權限,因為這樣UserActionConten關系表數據量會非常大。 支持(0)反對(0) 回復引用 #6樓[樓主]?2018-11-20 17:58?hao_1234_1234?? @?~雨落憂傷~
我覺得5與3的核心區別是:關系表(決定權限的表)由兩種因素共同確定。而3這種經典角色表,只由一種因素決定。 支持(0)反對(0) 修改刪除 #7樓?2018-11-20 18:01?~雨落憂傷~?? @?hao_1234_1234
那 5 為什么不直接用3個表
用戶表 關系表 權限表 支持(0)反對(0) 修改刪除 #8樓?2018-11-20 18:02?~雨落憂傷~?? @?hao_1234_1234
這樣設計 是不是 資源表有多少個 不固定
Channel
Content
UserActionContent
UserActionChannel表
不固定的 支持(0)反對(0) 回復引用 #9樓[樓主]?2018-11-20 18:07?hao_1234_1234?? @?~雨落憂傷~
我同意你的看法,原作者可能是為了未來拓展的方便。 當另一個Content2要和Action組合起來控制某個權限時,可以很方面的加表解決。 支持(0)反對(0) 修改刪除 #10樓?2018-11-20 18:12?~雨落憂傷~?? 我覺得3,4就已經很好的滿足需求了
如果在項目中再通過加表 來處理權限
未免有些麻煩 表的復雜度也會增加 支持(0)反對(0) 回復引用 #11樓[樓主]?2018-11-20 18:16?hao_1234_1234?? @?~雨落憂傷~
權限設計的復雜度取決于用戶需求的復雜度,如果用戶有這種需求,我們必須想辦法滿足需求。例如:5還可以和4結合使用,替換掉4中的UserAction,就可以應對復雜的需求變化。 支持(0)反對(0) 修改刪除 #12樓?2018-11-20 18:17?~雨落憂傷~?? @?hao_1234_1234
越復雜 項目不可控程度越高
?
我們可以看到在上圖中添加了UserAction表,使用此表來添加特殊用戶的權限,改表中有一個字段HasPermission可以決定用戶是否有某種操作的權限,改表中記錄的權限的優先級要高于UserRole中記錄的用戶權限。這樣在應用程序中我們就需要通過UserRole和UserAction兩張表中的記錄判斷權限。
到這兒呢并不算完,有可能用戶還會給出這樣的需求:對于某一種action所操作的對象某一些記錄會有權限,而對于其他的記錄沒有權限,比如說一個內容管理系統,對于某一些頻道某個用戶有修改的權限,而對于另外一些頻道沒有修改的權限,這時候我們需要設計更復雜的權限機制。
?
?
對于這樣的需求我們就需要對每一種不同的資源創建一張權限表,在上圖中對Content和Channel兩種資源分別創建了UserActionContent和UserActionChannel表用來定義用戶對某條記錄是否有權限;這種設計是可以滿足用戶需求的但是不是很經濟,UserActionChannel和UserActionContent中的記錄會很多,而在實際的應用中并非需要記錄所有的記錄的權限信息,有時候可能只是一種規則,比如說對于根Channel什么級別的人有權限;這時候呢我們就可以定義些規則來判斷用戶權限,下面就是這種設計。
總結
以上是生活随笔為你收集整理的ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5 入门详解
- 下一篇: Leetcode PHP题解--D29