该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限
( m0 t# t" {3 o1 W* z6 z- public class Test {
7 b9 [6 K3 V! w9 H. k, C2 p- R
# Y2 |) i1 |9 |: E" ~3 J6 B- /**
' n5 @0 s2 J& I* ]7 j% | - * @param args
: `, _% t6 a6 r. c( E - */# y4 ~: b% Z, g9 Z- V
- public static void main(String[] args) {, o. F- k4 K% {+ ]
- . \' ]: V8 E" N6 h' O
- /**
. s" H, {. L f4 ]$ }- k - * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
" q# v V7 o7 j6 v - */
" `: u/ {" I* {' p/ F4 E - - F& v' P5 q" e- ?3 G) i x' l4 R
- // 添加
% O e6 _ J# G' U: ~ s, K5 Z - int c = 1;// ...00016 T5 e. H- ~3 ~3 M* q4 e8 O
- // 查询/ n2 Z4 v) ]0 u
- int r = 2;// ...0010
! Z$ v0 h" C: ?/ ~9 s1 [3 X - // 修改1 ] n. C5 S9 u3 S# y
- int u = 4;// ...0100
4 b7 k/ K2 b7 N" q9 c3 w - // 删除6 }: ]- k8 h8 m( x/ P
- int d = 8;// ...1000
' u" [2 L; T: P) j0 f- ]8 F
- z' B3 |1 I0 n0 q3 `; V. a, ]- /**, w3 Z9 l7 \% p' A% b' ^
- * 6 c( U, |, p. D: u1 t! z z4 Y' ]
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,- L+ r0 C2 u5 r4 I" [
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0! \2 o: W4 t3 J* f% t& d7 p( |0 F
- *
3 L9 T1 }2 d/ z5 C1 O - */4 z3 }4 k0 m A( F+ S+ ~" R( i
- / O p7 Y/ x) F( j) {5 j$ b
- /**
+ E1 L: f) @2 R& }3 y2 P - *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作# t3 r/ C0 }( Z
- * 1 T$ ^- w& ^; R1 w
- */7 G& ~- R7 T# `# i, l
- 9 E) H; Y0 _) q f
- // 用户A有添加和修改权限
+ f( m$ }4 n$ \0 ` - int usera = c | r | u;
8 I: A! S1 q% d" V/ \ - / ]# T, s7 O1 e) H. l6 v4 ]+ Q
- // 用户B有添加和删除权限9 y, M& z0 ?8 t% |+ V
- int userb = c | d;
" L1 x- y! v) u& M* X' S' A, s2 h
: x* M b: e3 E* x' O0 `0 s3 N- /**
. I- _% D0 K9 |. k4 e- L - * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限! _* ~% C8 k/ ?6 V6 ^3 V4 F
- */
) i& V4 ~, P+ M8 ? - / l0 s$ L7 p% t$ c% M) _
- if ((usera & u) == u) {
7 f$ h) u+ F/ ^" e - System.out.println("用户a有更新权限");
" y; H- b1 K0 d, D - } else {) z- p# w) z: ]' f
- System.out.println("用户a没有有更新权限");
; X. q# a, A$ w0 t1 G. w9 ` - }
2 d/ @/ F' E! v& G; s* L - , A0 t Q, M/ W+ @
- /**9 @# N: [' b/ E: _* _# o
- * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值: s, H$ v# {# [* m
- */: j9 y1 B; B! A1 y9 y
- 6 }/ L- q& r& g( Z
- if ((userb & u) == u) {
$ X# P$ A* s; ?: `$ `* h" K/ q - System.out.println("用户b有更新权限");) c/ M0 ~' z a# g f# `: S# U
- } else {
& P- v8 h( ]) G& | - System.out.println("用户b没有更新权限");4 P! @ Z$ A: E7 K
- }4 K# m4 y: ~$ P, }
- " n7 ^3 g* v: q; c% i f% `
- // 给用户b添加更新权限% A. [7 S) `# ?2 h4 }
- userb = userb | u;
" G- s; x+ i2 N( Q! _# n9 {% M
/ `2 @$ E+ \; e2 E3 f- if ((userb & u) == u) {
) J3 G W# R* e) p7 q4 F - System.out.println("用户b有更新权限");
6 n/ K! G; O5 u. r1 o+ D# K) g - } else {
2 N+ l3 j1 f, `" L( N - System.out.println("用户b没有更新权限");
6 c8 r9 ?3 u. U0 g - }
! q5 N+ { v+ m' a2 }% h - 7 {- h e% P8 d8 i0 i i
- /**
3 [$ t2 Q/ L- z9 N6 Z( h! c3 Z - * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
8 o+ r8 Y0 {8 s4 c - */5 I& G8 e; a9 L
-
* S$ e: v& {8 V: Z: s - if ((usera & r) == r) {
1 d& L% a; _+ D! w; A - System.out.println("用户a有查询权限");1 N2 b3 F6 {3 v
- } else {
* m! U/ h1 a- u+ x! r! l - System.out.println("用户a没有查询权限");
! ] L# Q2 d& T" b' @ - }
% F; ^( @2 T* _! W4 q/ K+ g; o -
! |) f* \ X% `8 _2 q$ Y: S - //取消用户a的查询权限
- P# V- G: f* u- ` - usera = usera & (~r);8 f( a$ F: K' n8 A* u
- . N: N3 |$ Q0 w" s- l; K4 b6 U
- if ((usera & r) == r) {
/ A' Q, k* j) n3 d0 ]/ H+ k! O - System.out.println("用户a有查询权限");
8 q& q# T% p- u; _& O - } else {$ J, J& d/ Z! E" W f9 J
- System.out.println("用户a没有查询权限");
+ g( E& w: N% v/ d0 | - }
7 u* X* w1 n8 t7 M1 x. @ - }! w1 p7 `. S! ^+ v7 h' t
$ B# w1 D$ d" f) @, {- }
* u4 n: ^8 ]3 h. m: u. \: S
复制代码 3 M3 ] I& N9 ^2 n3 Q7 k. x- X! j) D
7 N) `( E0 {1 o; w) M
1 Q; b4 O( f9 j \ |
|