C#二进制位算 权限
- 关于权限管理,之前所做的都是一个权限对应一条数据,比方A页面有增删改查四个权限,那么用户在权限管理表中相对应AA页面有四条记录。后来改用二进制运算,发现省事很多。
- 首先说下位运算 熟悉一下操作符,懒得插入表格了,字节贴一张别人的图
- 看效果图,用一个枚举列出所有权限编号 之后八权限编号带进去运算,可以得到用户是否拥有该权限
- 所有A 值 A1 A2 A3 都是2的n次方数字经过 或位算 | 得到的 2 | 4=6 和相加的如果一样 但是 2|4 缺不能喝2+4 相提并论 。一个是一样的。
- 小明一开始 权限为0 经过或位算 加上 增、删、改 三个个权限 2、4 、8 结果为 14 这时候判断是否是否 有2 删除权限 答案是有的。
- 这类的运算使用的二进制
- 第一,2的8位二进制值为00000010
4的8位二进制值为00000100
8的8位二进制值为00001000
- 第二,当对8和4进行按位或操作后,结果为:
4|8 = 12
00000100 |00001000 = 00001100
为什么会是这样呢?在进行按位或操作时 00000001|00000001=00000001 ;00000001|00000000=1 ;00000000|00000000=00000000
也就是说除了0|0结果是0外,其它运算结果的都是1
所以 00000100 |00001000 = 00001100
也就说上面的 purview = k2|k3 的二进制值结果是 purview =00000100 |00001000 =00001100了
- 第三,当对8和4进行按位与操作后,结果为:
4&8=0
00000100 &00001000 = 00000000
同样为什么会是这样呢?在进行按位与操作时 00000001&00000001=00000001 ;
00000001&00000000=00000000 ;00000000&00000000=00000000
也就是说除了1&1结果是1外,其它运算结果的都是0
所以 00000100 &00001000 = 00000000
/******************************
* 项目 二进制位算
* 描述 权限系统
* 作者 @Sun
* 日期 2019-04-29
*******************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
class Program
{
static int a = 0; //定义小明初始权限 0无权限
static void Main(string[] args)
{ Console.WriteLine("查询是否有某一权限");
Console.Write("(A & B)输入A值:");
int A = Convert.ToInt32(Console.ReadLine());
Console.Write("(A & B)输入B值:");
int B = Convert.ToInt32(Console.ReadLine());
int C = A & B;
Console.WriteLine("(A & B)运算结果:A & B = {0}", C); Console.WriteLine("添加某一权限");
Console.Write("(A1 | B1)输入A1值:");
int A1 = Convert.ToInt32(Console.ReadLine());
Console.Write("(A1 | B1)输入B1值:");
int B1 = Convert.ToInt32(Console.ReadLine());
int C1 = A1 | B1;
Console.WriteLine("(A1 | B1)运算结果:A1 & B1 = {0}", C1); Console.WriteLine("删除某一权限");
Console.Write("(A2 &~ B2)输入A2值:");
int A2 = Convert.ToInt32(Console.ReadLine());
Console.Write("(A2 &~ B2)输入B2值:");
int B2 = Convert.ToInt32(Console.ReadLine());
int C2 = A2 &~ B2;
Console.WriteLine("(A2 &~ B2)运算结果:A2 &~ B2 = {0}", C2); Console.WriteLine("------------------------------------------"); Console.WriteLine("小明初权限 {0}", a); for (int i = 0; i < 3; i++)
{
Console.Write("{0}-*- 给小明添加权限 ",i);
int a1 = Convert.ToInt32(Console.ReadLine());
a = a1 | a;
Console.WriteLine("小明拥有权限 {0}", a);
} Console.Write("查看小明是否拥有某一权限");
int a2 = Convert.ToInt32(Console.ReadLine());
if ((a & a2) > 0)
{
Console.WriteLine("有");
}
else
{
Console.WriteLine("无");
} Console.ReadKey();
}
/// <summary>
/// 权限枚举
/// 2的N次方 2^n
/// </summary>
public enum Permission
{
Read = 1,
Add = 2,
Update = 4,
Delete = 8,
权限1 = 16,
权限2 = 32,
权限3 = 64,
权限4 = 128,
权限5 = 256,
权限6 = 512,
}
}
}
·····
C#二进制位算 权限的更多相关文章
- 转:RBAC权限控制
名词解释: RBAC:Role-Based Access Control,基于角色的访问控制 关键词: RBAC,Java Shiro,Spring Security, 一. RBAC 要解决 ...
- 2337:[HNOI2011]XOR和路径 - BZOJ
昨天才做了一道高斯消元,一下要精度判断,一下又不要精度判断 主要是思路很重要 很容易想到每一个二进制位算一个概率,然后求和,设f[i]为走到从i走到n这一个二进制位为1的概率 f[i]:=∑{f[j] ...
- PostgreSQL 安装 & 用户配置
一.为什么选择 PostgreSQL 自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选. MySQL被oracle收购,innodb随之被oracle控制. 二 ...
- linux系统编程之文件与io(一)
经过了漫长的学习,C语言相关的的基础知识算是告一段落了,这也是尝试用写博客的形式来学习c语言,回过头来看,虽说可能写的内容有些比较简单,但是个人感觉是有史起来学习最踏实的一次,因为里面的每个实验都是自 ...
- 隐私泄露杀手锏 —— Flash 权限反射
[简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...
- 【.net 深呼吸】限制执行代码的权限
前面好几篇文章,老周都跟大伙伴们聊了跟应用程序域有关的话题,干脆咱们一聊到底吧,做学问就应该这样,有恒心. App Domain的创建新应用程序域的方法中,有一个特殊的重载: public stati ...
- 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布
距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...
- 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net
在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...
- SpringMVC + Spring + MyBatis 整合 + Spring shrio + easyUI + 权限管理框架,带shrio session和shrio cache集群实现方案
工作之余先来写了一个不算规范的简单架子 基于spring mvc + spring + mybatis + Spring shrio 基于redis的集群方案 系统权限部分,分成多个机构,其中每个机构 ...
随机推荐
- 设置div中的div居中显示
设置div中的div居中显示 方法一. <div class='big'> <div class='small'>box1</div> </div> s ...
- word 2007 写CSDN博客
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- Python学习-8.Python的循环语句-while语句
例子: i = 1 while i < 10: print(i) i+=1 else: print('finish') 输出1至9和finish 在while语句中同样支持for语句所支持的co ...
- linux系统上查看硬件信息
一:查看CPU more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如 ...
- java 传参数时 类型后跟 3个点 "..." 的意义
对照代码和运行结果便知"..." 的意义 import java.util.ArrayList; public class StringDemo { public static v ...
- 如何修改TFS 2013中工作项附件大小限制
默认情况下,TFS工作项的附件大小限制为4MB.我们可以通过调用TFS提供的Web Service将这个限制调整最高到2GB. 调整这个设置的必备条件是你需要拥有TFS应用层管理员的权限.下面来看看如 ...
- 使用oracle9的 odbc 连接oracle11
客户机上基于Oracle 9i的ODBC数据源,无法连接oracle 11G数据库,提示错误为:error ORA-01017, Invalid Username / Password.奇怪的是:sq ...
- asp.net web 应用站点支持域账户登录
1.IIS站点应用程序池设置管道模式为classic模式,identity设置为管理员账户 2.站点验证设置,只打开windows验证,其他都关闭 3.应用程序配置web.config配置如下: &l ...
- 类似gitlab代码提交的热力图怎么做?
本文由 网易云发布. 作者:张淞(本篇文章仅限知乎内部分享,如需转载,请取得作者同意授权.) 昨夜,网易有数产品经理路过开发的显示屏前见到了类型这样的一张图: 于是想到有数能不能做出这样的图来?作为 ...
- pageadmin CMS网站建设教程:网页设计的常用参数
由于网络速度问题,我们需要考虑图片大小对传输速度的影响,如果图片太大就会影响浏览速度,访问者很快就会对这个网站失去了兴趣,只有充分了解图片质量与下载速度的关系,并了解不同的文件格式,才能更有效的表达内 ...