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值显示出来。
应用程序权限设计
我们在开发系统的时候,经常会遇到系统需要权限控制,而权限的控制程度不同有不同的设计方案。
- 1. 基于角色的权限设计
这种方案是最常见也是比较简单的方案,不过通常有这种设计已经够了,所以微软就设计出这种方案的通用做法,这种方案对于每一个操作不做控制,只是在程序中根据角色对是否具有操作的权限进行控制;这里我们就不做详述
- 2. 基于操作的权限设计
这种模式下每一个操作都在数据库中有记录,用户是否拥有该操作的权限也在数据库中有记录,结构如下:
但是如果直接使用上面的设计,会导致数据库中的UserAction这张表数据量非常大,所以我们需要进一步设计提高效率,请看方案3
- 3. 基于角色和操作的权限设计
如上图所示,我们在添加了Role,和RoleACTION表,这样子就可以减少USERACTION中的记录,并且使设计更灵活一点。
但是这种方案在用户需求的考验之下也可能显得不够灵活够用,例如当用户要求临时给某位普通员工某操作权限时,我们就需要新增加一种新的用户角色,但是这种用户角色是不必要的,因为它只是一种临时的角色,如果添加一种角色还需要在收回此普通员工权限时删除此角色,我们需要设计一种更合适的结构来满足用户对权限设置的要求。
- 4. 2,3组合的权限设计,其结构如下:
我们可以看到在上图中添加了UserAction表,使用此表来添加特殊用户的权限,改表中有一个字段HasPermission可以决定用户是否有某种操作的权限,改表中记录的权限的优先级要高于UserRole中记录的用户权限。这样在应用程序中我们就需要通过UserRole和UserAction两张表中的记录判断权限。
到这儿呢并不算完,有可能用户还会给出这样的需求:对于某一种action所操作的对象某一些记录会有权限,而对于其他的记录没有权限,比如说一个内容管理系统,对于某一些频道某个用户有修改的权限,而对于另外一些频道没有修改的权限,这时候我们需要设计更复杂的权限机制。
- 5. 对于同一种实体(资源)用户可以对一部分记录有权限,而对于另外一些记录没有权限的权限设计:
对于这样的需求我们就需要对每一种不同的资源创建一张权限表,在上图中对Content和Channel两种资源分别创建了UserActionContent和UserActionChannel表用来定义用户对某条记录是否有权限;这种设计是可以满足用户需求的但是不是很经济,UserActionChannel和UserActionContent中的记录会很多,而在实际的应用中并非需要记录所有的记录的权限信息,有时候可能只是一种规则,比如说对于根Channel什么级别的人有权限;这时候呢我们就可以定义些规则来判断用户权限,下面就是这种设计。
- 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# 读写文件摘要
主要参考地址: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; }
- }
#3楼[楼主] 2018-11-20 17:46 hao_1234_1234
#5楼[楼主] 2018-11-20 17:52 hao_1234_1234
#6楼[楼主] 2018-11-20 17:58 hao_1234_1234
#9楼[楼主] 2018-11-20 18:07 hao_1234_1234
#11楼[楼主] 2018-11-20 18:16 hao_1234_1234
越复杂 项目不可控程度越高
- 2,3组合的权限设计,其结构如下:
我们可以看到在上图中添加了UserAction表,使用此表来添加特殊用户的权限,改表中有一个字段HasPermission可以决定用户是否有某种操作的权限,改表中记录的权限的优先级要高于UserRole中记录的用户权限。这样在应用程序中我们就需要通过UserRole和UserAction两张表中的记录判断权限。
到这儿呢并不算完,有可能用户还会给出这样的需求:对于某一种action所操作的对象某一些记录会有权限,而对于其他的记录没有权限,比如说一个内容管理系统,对于某一些频道某个用户有修改的权限,而对于另外一些频道没有修改的权限,这时候我们需要设计更复杂的权限机制。
- 对于同一种实体(资源)用户可以对一部分记录有权限,而对于另外一些记录没有权限的权限设计:
对于这样的需求我们就需要对每一种不同的资源创建一张权限表,在上图中对Content和Channel两种资源分别创建了UserActionContent和UserActionChannel表用来定义用户对某条记录是否有权限;这种设计是可以满足用户需求的但是不是很经济,UserActionChannel和UserActionContent中的记录会很多,而在实际的应用中并非需要记录所有的记录的权限信息,有时候可能只是一种规则,比如说对于根Channel什么级别的人有权限;这时候呢我们就可以定义些规则来判断用户权限,下面就是这种设计。
ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要的更多相关文章
- asp.net后台管理系统-登陆模块-是否自动登陆
FormsAuthentication.SetAuthCookie(UserFlag, createPersistentCookie); createPersistentCookie是否永久保存coo ...
- ASP.NET -- WebForm -- Cookie的使用
ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 <%@ Page Language="C#&q ...
- [文章汇总]ASP.NET Core框架揭秘[最近更新:2018/10/31]
之前一段时间都在个人公众号账号“大内老A”发布关于ASP.NET Core的系列文章,很多人留言希望能够同步到这里,所以在这里 对这些文章做一个汇总,以便于PC端阅读.如果说微软官方文档主要关于ASP ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统--系统模块部分图
系统日志,系统异常,组织架构等
- 一、ASP.NET MVC 路由(一)--- ASP.NET WebForm路由模拟
ASP.NET WebForm 应用,用户请求的是物理文件,其中包括静态页面和动态页面,在Url中的显示都是服务器中一个物理文件的相对路径.但是ASP.NET MVC就不同了,用户请求的是Contro ...
- ASP.NET WebForm路由模拟
一.ASP.NET MVC 路由(一)--- ASP.NET WebForm路由模拟 2014-11-08 11:49 by 郝喜路, 232 阅读, 0 评论, 收藏, 编辑 ASP.NET Web ...
- 利用Bootstrap+Avalonjs+EntityFramework 开发ASP.NET WebForm应用程序(上)
本文将介绍如何利用Bootstrap+Avalonjs+EntityFramework 开发ASP.NET WebForm应用程序,分为上下两篇.上篇主要介绍实现,下篇主要介绍界面. 打开Visual ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- ASP.NET -- WebForm -- HttpRequest类的方法和属性
ASP.NET -- WebForm -- HttpRequest类的方法和属性 1. HttpRequest类的方法(1) BinaryRead: 执行对当前输入流进行指定字节数的二进制读取. ( ...
随机推荐
- vue-cli@3.x之使用vue ui创建项目-来自一个战五渣的体验
1. 全局安装vue-cli yarn global add @vue/cli // 检查安装是否成功 vue -V // 3.2.2 2. 初始化 vue ui 执行命令 vue ui 2.1 该命 ...
- 搭建vue脚手架---vue-cli
vue-cli作为一款mvvm框架语言(vue)的脚手架,集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.我们在开发项目时尤其需要这样一个快速构建项目的工具. 以下 ...
- HNOI 2017
题目链接 我还是按bzoj AC数量排序做的 4827 这个其实如果推一下(求每个值)式子会发现是个卷积,然后FFT就好了 4826 记不太清了,可以求出每个点左右第一个比他的的点的位置,将点对看成平 ...
- 利用Spring的junit4测试
利用Spring的JUnit4进行测试 不需要再显式创建Spring容器和getBean @RunWith(SpringJUnit4ClassRunner.class) @ContextConfigu ...
- ajax中的async属性值之同步和异步及同步和异步区别
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里 ...
- CentOS7.5 通过wget下载文件到指定目录
在Linux命令行下面下载文件,通过wget是比较普遍简单的,比如在CentOS7 里面也一样. 我们先来看下自己的CentOS7 系统有没有安装wget: [root@test redis]# rp ...
- C++程序设计方法3:对象组合
对象组合 包含其他类的对象 可以在类中使用其他类来定义数据成员,通常称为“子对象”:这种包含与被包含的对象间的关系称为“组合”,组合关系可以嵌套. 子对象构造时若需要参数,则应当在当前类的构造函数的初 ...
- [jzoj]1417.数学题
Link https://jzoj.net/senior/#main/show/1417 Problem 当Alice在浏览数学书时,看到一个等式A=S,奇怪的是A和S并不相等.Alice发现可以通过 ...
- jemter模拟高并发访问(亲测ok)
https://blog.csdn.net/a574258039/article/details/19549407
- 深入理解JVM(10)——Class文件结构
什么是“JVM”的无关性 Java具有平台无关性,也就是任何操作系统都能够运行Java代码,之所以能够实现这一点,是因为Java运行在虚拟机上,不同的操作系统都有各自的Java虚拟机,从而实现一次编译 ...