该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限/ K4 E6 U4 u4 Y' K3 \8 ]# F$ f8 F7 ~
- public class Test {5 _- F7 x& R0 J+ ^+ W$ r' F
+ W+ U/ W: k4 h: j& d- /**) J! N6 Q0 V8 C+ y
- * @param args
% ~' S Q p! k - */
! E# W7 w6 h7 j D5 N& K+ b% O5 H - public static void main(String[] args) {& b( N/ k3 t; I! U( g1 F/ H
5 i) p F8 q& z4 S$ J! n- /**
7 W2 t) j% n' M3 [, @) m - * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明& K) z2 g/ a+ P; e' h4 y% X/ J; O
- */, |5 \ M- s2 G2 P' n
- 9 Y/ U' o3 t$ }' A3 o; g
- // 添加/ j1 M( u' Y6 u2 r
- int c = 1;// ...0001
. F( T: |* j/ ?4 j5 c7 P; D$ T - // 查询/ f6 _# H# \5 p% D! S' b/ c6 a
- int r = 2;// ...0010
% c2 N$ R+ t" w5 c- p! \, k - // 修改1 J5 G% ^1 C: S; r5 s3 M8 n
- int u = 4;// ...0100
& y# P+ F, [* v, ^: m5 a) h6 @. H - // 删除) `! Y* I: _9 L$ `/ y. m
- int d = 8;// ...1000
( H# r7 [6 o3 |- m
6 e( I# z- J: |, [# m- /**
' z9 O* e8 q, m: I: Z - * J. K+ c: D% G* s
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,1 `2 D& r; a. Y8 {0 w1 ~5 a
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
7 d6 w0 v) H& | - *
4 S; f, u' A! } - */" ~- J5 l, f7 T8 k" s
- % U: ]' ~# E. r' y7 v
- /**
( m2 O j- g- m+ }1 X - *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作0 ^6 y) J/ p) C' y
- * ) M: I+ ^: M m, } I9 {
- */# v- r2 M1 d2 \0 I3 _; ~
$ N4 q( S5 G4 `5 B/ l! K- // 用户A有添加和修改权限
6 i4 Z+ M* L" b. F2 Q& J - int usera = c | r | u;: O* N: ?* ^8 g, F i
* C' `7 B- I2 C2 z0 }/ b8 G1 e- Q- // 用户B有添加和删除权限
. w. X+ q: t" v - int userb = c | d;
7 Q9 D3 P l: ~9 Y
+ _6 t9 K% ]! k- /**
5 Y0 B# b3 c) c; P4 a - * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限( E7 D8 v. X! d+ j/ b5 ]9 F
- */7 ^8 T: x7 v+ S* E) l7 F
- 9 Z# S6 l. a* u" b" _8 ~) x7 L
- if ((usera & u) == u) {
O, n2 E: m; M1 N8 w5 n k - System.out.println("用户a有更新权限");
/ q2 Y R0 }7 ~$ L% B4 A+ `2 } u/ B - } else {
2 U1 [2 K S0 j5 i" _# M - System.out.println("用户a没有有更新权限");
! i; _: [6 F/ M; D( v - }
( n- \$ N4 X K) I' d7 `
$ g/ s% ^0 j+ ]' P/ W- }- /**
% A% q( Q( b" M# b2 H+ U - * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
( Y ?8 O( ^. P; _$ L) W+ E. }2 { - */
) u. y% D w1 Q7 }
/ w2 K4 ?" Y# h: ^- if ((userb & u) == u) {9 E! i# r* }1 }5 x6 o% B1 m
- System.out.println("用户b有更新权限");2 P7 W2 A' [7 w# p. h& F! J
- } else {* U9 N4 I$ T) i
- System.out.println("用户b没有更新权限");
( q# y( C2 C" c/ ?4 h3 W - }
P) W& a& T! @" H) s& g
2 P5 Y# N2 E; j- // 给用户b添加更新权限7 ^1 q, b( G# M N' O
- userb = userb | u;* {" L7 t) s! q3 f
- ! G2 ], l% n1 C; t
- if ((userb & u) == u) {
; }4 a/ C& ~) e7 ]4 Q - System.out.println("用户b有更新权限");
6 Q6 i% U f9 I' O. u; f - } else {
) ~) U* R# c$ Z; N - System.out.println("用户b没有更新权限");$ c' c0 v3 w' v1 S
- }
9 k: J: \$ Z$ ]+ c# c - , ^# L3 h, e# W! }
- /**
- a3 ~: y' ^ z, O- Z3 r6 z - * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
7 j. n! B0 ?. n$ z) ~! U - */
, I# o9 y2 Y& W8 c4 Z0 @8 V - $ T1 M( t) }) I( w0 s
- if ((usera & r) == r) {4 }/ c6 `6 b9 ]. h
- System.out.println("用户a有查询权限");1 Y- L/ `! q3 {' [6 o
- } else {
2 `. Y4 P( ^1 A* X9 a" ]" Y - System.out.println("用户a没有查询权限");6 E5 l5 } H m: Y7 J0 E
- } D! o# g- J9 y: b
-
% k# A; u+ j, F) u! [ X) V - //取消用户a的查询权限
' Y! u. R6 B" e - usera = usera & (~r);
4 Z, _! J7 p V -
( \& [! }7 _+ G! Q% E - if ((usera & r) == r) {- s9 _% H9 \. M" D/ _7 @2 L
- System.out.println("用户a有查询权限");3 x7 b0 \+ M; u9 N3 \0 S7 h) X% w
- } else {4 R' e+ ?( i! s7 x- O
- System.out.println("用户a没有查询权限");6 c8 c" P0 M- F) r9 |) B
- }& p1 w1 f/ i6 g* U0 o, B) @# k
- }
( C1 _5 \. H& {3 P* E6 s8 t - 5 H! }7 q7 [$ ~5 Z
- }
( u8 U2 Y% H' B0 X- x5 V
复制代码
2 n0 G" J0 G$ ~3 X9 o" h z( c3 A. C. a3 [. y5 w6 B
" \9 | w8 m( o" p v |
|