ASP.NET -- WebForm -- Cookie的使用 應用程序權限設計 權限設計文章彙總 asp.net後臺管理系統-登錄模塊-是否自動登錄 C# 讀寫文件摘要

ASP.NET -- WebForm -- Cookie的使用

ASP.NET -- WebForm --  Cookie的使用html

Cookie是存在瀏覽器內存或磁盤上。java

1. Test3.aspx文件git

複製代碼
<%@ 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文件sql

複製代碼
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值顯示出來。服務器

 

 

 

應用程序權限設計

 

咱們在開發系統的時候,常常會遇到系統須要權限控制,而權限的控制程度不一樣有不一樣的設計方案。cookie

 

  1. 1.       基於角色的權限設計

這種方案是最多見也是比較簡單的方案,不過一般有這種設計已經夠了,因此微軟就設計出這種方案的通用作法,這種方案對於每個操做不作控制,只是在程序中根據角色對是否具備操做的權限進行控制;這裏咱們就不作詳述asp.net

 

  1. 2.       基於操做的權限設計

這種模式下每個操做都在數據庫中有記錄,用戶是否擁有該操做的權限也在數據庫中有記錄,結構以下:ide

 


可是若是直接使用上面的設計,會致使數據庫中的UserAction這張表數據量很是大,因此咱們須要進一步設計提升效率,請看方案3

 

  1. 3.       基於角色和操做的權限設計

 


如上圖所示,咱們在添加了Role,和RoleACTION表,這樣子就能夠減小USERACTION中的記錄,而且使設計更靈活一點。

可是這種方案在用戶需求的考驗之下也可能顯得不夠靈活夠用,例如當用戶要求臨時給某位普通員工某操做權限時,咱們就須要新增長一種新的用戶角色,可是這種用戶角色是沒必要要的,由於它只是一種臨時的角色,若是添加一種角色還須要在收回此普通員工權限時刪除此角色,咱們須要設計一種更合適的結構來知足用戶對權限設置的要求。

 

  1. 4.       2,3組合的權限設計,其結構以下:

 


咱們能夠看到在上圖中添加了UserAction表,使用此表來添加特殊用戶的權限,改表中有一個字段HasPermission能夠決定用戶是否有某種操做的權限,改表中記錄的權限的優先級要高於UserRole中記錄的用戶權限。這樣在應用程序中咱們就須要經過UserRoleUserAction兩張表中的記錄判斷權限。

到這兒呢並不算完,有可能用戶還會給出這樣的需求:對於某一種action所操做的對象某一些記錄會有權限,而對於其餘的記錄沒有權限,好比說一個內容管理系統,對於某一些頻道某個用戶有修改的權限,而對於另一些頻道沒有修改的權限,這時候咱們須要設計更復雜的權限機制。

 

  1. 5.       對於同一種實體(資源)用戶能夠對一部分記錄有權限,而對於另一些記錄沒有權限的權限設計:

 


對於這樣的需求咱們就須要對每一種不一樣的資源建立一張權限表,在上圖中對ContentChannel兩種資源分別建立了UserActionContentUserActionChannel表用來定義用戶對某條記錄是否有權限;這種設計是能夠知足用戶需求的可是不是很經濟,UserActionChannelUserActionContent中的記錄會不少,而在實際的應用中並不是須要記錄全部的記錄的權限信息,有時候可能只是一種規則,好比說對於根Channel什麼級別的人有權限;這時候呢咱們就能夠定義些規則來判斷用戶權限,下面就是這種設計。

 

  1. 6.       涉及資源,權限和規則的權限設計

 


在這種設計下角色的概念已經沒有了,只須要Rule在程序中的類中定義用戶是否有操做某種對象的權限。

以上只是分析思路,若是有不對的地方,請你們指正。

 
 
 

權限設計文章彙總

 

 

如何設計網站權限系統?

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# 讀寫文件摘要

 

主要參考地址:http://www.javashuo.com/article/p-rdeudvii-p.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 又至關於什麼呢?
#3樓 [ 樓主] 2018-11-20 17:46 hao_1234_1234  
@ ~雨落憂傷~
誰實話五、6部分我也沒看懂。我把content理解爲文件,UserActionContent關係表控制權限這我的能夠經過ActionID對應的方法訪問ContentID對應的文件,但不能訪問其它文件。
#4樓 [ 樓主] 2018-11-20 17:49 hao_1234_1234  
@ ~雨落憂傷~
UserActionChannel 同理
#5樓 [ 樓主] 2018-11-20 17:52 hao_1234_1234  
@ ~雨落憂傷~
我以爲實際應用中,User表和UserActionContent表之間還能夠加一個角色role表,變成 user --userRole(關係表)--role--roleActionContent。 由於通常不會單獨對每個人配置權限,由於這樣UserActionConten關係表數據量會很是大。
#6樓 [ 樓主] 2018-11-20 17:58 hao_1234_1234  
@ ~雨落憂傷~
我以爲5與3的核心區別是:關係表(決定權限的表)由兩種因素共同肯定。而3這種經典角色表,只由一種因素決定。
#7樓   2018-11-20 18:01 ~雨落憂傷~  
@ hao_1234_1234
那 5 爲何不直接用3個表
用戶表 關係表 權限表
#8樓   2018-11-20 18:02 ~雨落憂傷~  
@ hao_1234_1234
這樣設計 是否是 資源表有多少個 不固定
Channel
Content
UserActionContent
UserActionChannel表
不固定的
#9樓 [ 樓主] 2018-11-20 18:07 hao_1234_1234  
@ ~雨落憂傷~
我贊成你的見解,原做者多是爲了將來拓展的方便。 當另外一個Content2要和Action組合起來控制某個權限時,能夠很方面的加表解決。
#10樓   2018-11-20 18:12 ~雨落憂傷~  
我以爲3,4就已經很好的知足需求了
若是在項目中再經過加表 來處理權限
未免有些麻煩 表的複雜度也會增長
#11樓 [ 樓主] 2018-11-20 18:16 hao_1234_1234  
@ ~雨落憂傷~
權限設計的複雜度取決於用戶需求的複雜度,若是用戶有這種需求,咱們必須想辦法知足需求。例如:5還能夠和4結合使用,替換掉4中的UserAction,就能夠應對複雜的需求變化。
#12樓   2018-11-20 18:17 ~雨落憂傷~  
@ hao_1234_1234
越複雜 項目不可控程度越高
 
  1. 2,3組合的權限設計,其結構以下:

 


咱們能夠看到在上圖中添加了UserAction表,使用此表來添加特殊用戶的權限,改表中有一個字段HasPermission能夠決定用戶是否有某種操做的權限,改表中記錄的權限的優先級要高於UserRole中記錄的用戶權限。這樣在應用程序中咱們就須要經過UserRole和UserAction兩張表中的記錄判斷權限。

到這兒呢並不算完,有可能用戶還會給出這樣的需求:對於某一種action所操做的對象某一些記錄會有權限,而對於其餘的記錄沒有權限,好比說一個內容管理系統,對於某一些頻道某個用戶有修改的權限,而對於另一些頻道沒有修改的權限,這時候咱們須要設計更復雜的權限機制。

 

  1. 對於同一種實體(資源)用戶能夠對一部分記錄有權限,而對於另一些記錄沒有權限的權限設計:

 


對於這樣的需求咱們就須要對每一種不一樣的資源建立一張權限表,在上圖中對Content和Channel兩種資源分別建立了UserActionContent和UserActionChannel表用來定義用戶對某條記錄是否有權限;這種設計是能夠知足用戶需求的可是不是很經濟,UserActionChannel和UserActionContent中的記錄會不少,而在實際的應用中並不是須要記錄全部的記錄的權限信息,有時候可能只是一種規則,好比說對於根Channel什麼級別的人有權限;這時候呢咱們就能夠定義些規則來判斷用戶權限,下面就是這種設計。

5 將模塊劃分爲大模塊(一個頻道模塊 裏面不少頻道 設計了一個頻道表) 子模塊 沒有角色概念
相關文章
相關標籤/搜索