该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限- ]0 {) e- ?; g8 } z
- public class Test {
4 @+ m' c: J! u9 t9 s" X
$ u& w, {) S$ Z: a" j1 }- /**
( p! S, x+ W: z - * @param args
1 d8 I% u' R4 | - */
]) A9 c+ G5 t4 o - public static void main(String[] args) {
4 I9 f4 c P' z
" W7 P3 v- s5 `! v4 C4 b5 g- /**: X3 P2 X, T! E# o
- * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
# L9 \* |6 a8 n. F - */7 H- \! p E% D, V: a* ?
$ b N" c# T( _' p Q- // 添加4 ^! M- s _* a$ o
- int c = 1;// ...0001' y' q& ^, Z6 {; D! J
- // 查询+ `5 ?6 O! d. r* o+ t) ]
- int r = 2;// ...0010$ o; x7 c( k/ |# _8 [ _$ C; X
- // 修改0 g, U3 \' x+ {7 G2 t+ i+ J' x
- int u = 4;// ...0100& R+ M1 S: P9 S* R, A1 l5 W
- // 删除
2 I3 A: a3 f5 T q$ \- u( o - int d = 8;// ...1000
. x! F! K4 }2 u8 i) [( E- d. p( V - ! b& o" H) X7 {: l7 d- g+ T4 I
- /**
. W7 D l! U* v% K* X - * ; Z8 f% C( U' I; z8 L8 a+ F
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,9 g7 t q Z2 X% a7 w2 D" E
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
+ D2 x& M4 F7 J4 Z; m r - *
^' Z6 h% ?% |) z8 R4 e - */& O8 z/ M5 P: j
0 Z. m# H/ o9 R/ \$ `) x' q- /**3 V: S1 x0 x3 X) x
- *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作( O# b/ [% u) j' y. N- A
- * 3 \6 X: m+ R9 j$ z
- */
5 W/ B/ Q6 i0 f" k$ u
0 F1 c. I) k' F( T- // 用户A有添加和修改权限4 h8 Q3 _& _/ x& T, C9 v3 P/ o
- int usera = c | r | u;% }; N' d+ |. [8 }( {" T* @
- $ ^# E2 N4 E$ R; m" {
- // 用户B有添加和删除权限! ?3 u) J2 g0 z* U: E& D$ H7 f
- int userb = c | d;
( ?+ C6 K$ ~9 d: p( R# M2 t# J
( W0 g- V$ \7 V( Q7 ?8 a7 p- /**7 t, G, Z5 k* \0 k4 K4 k0 Q, {
- * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
' q% ^% P; w2 s1 d - */
$ O& g' d+ z$ U; }
. C H. c3 w6 r- if ((usera & u) == u) {
1 ?+ C% _; Y" B1 I) X; V% T: @4 n - System.out.println("用户a有更新权限");
; n9 {, I! \ ]5 n/ D0 O - } else {" h, u: u$ Z" \4 X8 C. y
- System.out.println("用户a没有有更新权限");7 Y A7 I2 R, {7 s
- }
4 U' { `9 o9 E$ Y5 C9 _, j2 |
( ~" P! _* F, j- r% B4 h- /**
/ X7 X+ C3 G8 u/ K. |+ U - * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值5 u2 i5 D, Q$ U \$ |& w8 Y6 o
- */& l4 _1 x2 W. _7 A
0 d w3 K" ]4 I/ g# y5 K- if ((userb & u) == u) {
) R1 Z1 B7 T! j7 e( D$ x% }! V6 s - System.out.println("用户b有更新权限");: s! L. Y8 J+ F
- } else {
& ?) G) E% d1 Q2 F1 ? - System.out.println("用户b没有更新权限");( @' i2 T7 c$ R
- }; i) H7 s9 q' x' }
# J1 z4 D% L: T- // 给用户b添加更新权限9 l) C% K- t+ I+ O" X
- userb = userb | u;
% G: J9 P6 [+ a2 b9 h7 I* j& t" _4 Z - 6 w* F2 Y1 I/ y5 W4 @3 G6 }
- if ((userb & u) == u) {
+ p: [; ]- Q2 }) ^ E8 P - System.out.println("用户b有更新权限");
3 L) ]7 j, L. R4 x ]& n: k - } else {
0 E" h: Y3 y3 v) Y- p - System.out.println("用户b没有更新权限");
( q# O# r3 H) x# @( Z - }) m+ V2 ?3 ]/ m" R3 G+ d6 g. r+ ^
- 0 O6 X S0 R0 m
- /**
( d: u1 B; h" \, P - * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
+ u. y3 }# y( }4 Y - */; M5 o8 y* U. O' L
-
[- Y' s/ I( J+ f6 a5 y - if ((usera & r) == r) {( D' Q, W7 z1 j: A: H
- System.out.println("用户a有查询权限");
7 c! P6 g C. p. c; E1 r, j - } else {
' b9 k( i3 Y- c# z1 m8 f$ l- E. r/ z - System.out.println("用户a没有查询权限");
" h0 `2 q& ]9 q& K - }8 ~. J) v4 X8 {0 B: H4 e4 e/ l1 M% x3 l
- 0 l- g; _- I$ O0 Y
- //取消用户a的查询权限
1 a* N6 Y$ X* R5 z - usera = usera & (~r);& ?/ a, J9 S. W. d) }
-
* M" I4 u0 q. k4 k - if ((usera & r) == r) {* }) \3 n2 m: M+ h: Z9 \2 L$ ~ }- f
- System.out.println("用户a有查询权限");
% L1 j3 M& W3 G0 F v" g" K3 B* | - } else {
) u1 H2 }+ G( m+ O9 }' X5 [. A+ G) ` - System.out.println("用户a没有查询权限");
) m, [9 E& z: {* L5 k/ q - }
9 u, \4 L' O$ q7 _6 x E% N S - }% b- E; U. a( X- i7 Q# G
- ! V# _$ E0 D6 A
- }
+ N5 S) i& A- ^# _
复制代码
0 Q0 c+ L# K1 | G F; I$ q7 r) J! o2 _# j) G3 |+ a
: k; G9 g6 n' Y
|
|