该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限% Y( t2 r, s. j
- public class Test {$ b- H$ c ]5 w( |, s4 _' O" }
- % \9 C2 D% b! c0 v- b
- /**3 g6 q3 S3 I$ s
- * @param args
! g( L3 s9 W" O - */
, o4 F- w4 N ~$ r- A* X! u& F - public static void main(String[] args) {& N% B) A* J$ u- K
- ( v1 n8 J& _, @2 O7 w
- /**
5 J! g4 N+ f/ l# j5 n3 A/ W - * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明6 P2 T$ {5 v& _3 }, k
- */- c, Z' o7 c$ D4 d9 c
5 v: n. R! i5 E- // 添加
! ~' _9 Y1 K& n. @2 ]: I6 j - int c = 1;// ...0001
9 p5 V% w: q: j4 e8 ^ - // 查询
. _4 V# }# Y. O7 S& K - int r = 2;// ...0010
/ ^6 l* q" R! z4 m, ]" D/ Q - // 修改4 S! m/ z# ?* ?
- int u = 4;// ...01000 u0 t4 p4 o w b+ _
- // 删除3 q: A& s8 C B8 {% }
- int d = 8;// ...1000- u; d, M# x8 C4 ^& R u
- + `5 h1 t; s+ F# X$ e% N
- /**' [5 A9 E6 ^4 T4 F+ g: Q
- *
9 m: `9 Q3 V- |% i5 W - * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,& U$ _8 P8 P6 t5 ]( z
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
5 q: y u6 Q7 k( { - *
+ U7 a W4 @$ k7 R0 } - */ f1 p/ F" |' g' U3 f+ F' Q
6 Q6 R. A2 n! ^7 ^* v& |3 U- /**: g7 ~1 K& u' f' y! Y! V- l( N M
- *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作
0 X; N' k6 H' k - *
3 N; r6 @& E1 [! m - */+ s% x2 c6 V- N" j& a5 @
* t% C% D4 G0 s! W- y- // 用户A有添加和修改权限
* j h" W+ |- I: K1 F - int usera = c | r | u;* l6 b2 c9 B3 y7 }0 k+ B# Y7 ?
+ I* u: B2 x4 q8 s. A- // 用户B有添加和删除权限
: K* f9 e, V- k- r) l1 Q - int userb = c | d;5 N0 L' p/ ?+ m A7 r1 U/ a
$ ~* q z3 f# t- /**
6 M! N, l- [5 t: R! @3 Q - * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
0 K9 k! U$ o( E& k5 L' U - */
5 L- x; M1 w5 g+ ? - 3 p0 v- S l& K/ J- \' K7 r
- if ((usera & u) == u) {. z- C9 y$ j9 J3 j
- System.out.println("用户a有更新权限");
% r( k- ]0 h4 D" v R0 H5 v& d - } else {& d+ T, N5 n2 s+ i# _, {
- System.out.println("用户a没有有更新权限");
# B n3 V8 U3 ?+ B - }
# w! _# c* @: } - % k" h' m/ S- ^$ T. }
- /**9 W0 C2 F/ }' P1 M0 @# Y# }
- * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值: R& E# h4 S2 U, \
- */! m5 l1 w- c# S) V7 g/ y' L
- . m/ R) A5 @& `- C: ?
- if ((userb & u) == u) {
4 I' @5 h; i q" K6 @! c; U1 \ - System.out.println("用户b有更新权限");
' {0 B, D. m/ P - } else {$ o0 |' e$ n0 h5 I& V
- System.out.println("用户b没有更新权限");% ]6 \1 H$ b. q8 N+ i2 E2 O; U
- }
4 t. b7 ]$ ]) ?5 s - ' N) [6 D* R T3 o# Y
- // 给用户b添加更新权限0 c9 t. W% \6 P+ f) ~5 i2 u( g
- userb = userb | u;9 N# v$ Q" ^' n! G
- 7 ?( _. b* K0 v5 A
- if ((userb & u) == u) {
/ H" Q/ E- a) |1 g6 C% e - System.out.println("用户b有更新权限");
" f) ?8 j- W! s* `/ B4 f2 T - } else {7 }/ P" }" B( [, V; H- i
- System.out.println("用户b没有更新权限");
3 g+ v. z) M+ }; j5 G( o0 [- a0 t - }/ W: Y% _. P* Z1 H6 d
- : t4 q5 R2 |6 ?1 ~6 |0 d5 }2 K& Z
- /**
& R/ z$ c7 y* L - * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
4 j3 e6 a/ U6 ` E" S' C- y% F2 }5 J - */
% ~. ?( V6 d7 p$ N) y6 t# { -
! Y) j; ~% Q( T+ u2 y, v6 \& A7 n - if ((usera & r) == r) {
; f" `( q) K& m( U7 y4 q' ]6 \ - System.out.println("用户a有查询权限");
# J& w8 T; S+ d: u! T - } else {
* \3 z2 c/ C: O4 |3 [$ f - System.out.println("用户a没有查询权限");
$ o, Z( m% y: x0 t4 f, H: ?8 a - }
. P) k7 N5 @0 D& ?5 x - 4 X0 q. D; L) I9 S, A
- //取消用户a的查询权限
/ z" J q) N+ b" n& a3 ^. }5 b) i: [( ]/ O - usera = usera & (~r);+ X: I4 R+ a* P
-
/ b% `: F: V, i! k# W6 M - if ((usera & r) == r) {) F* a) R6 x1 o j
- System.out.println("用户a有查询权限");- I" b4 J" M/ X) u; D
- } else {) }( t g3 |$ e* o( @
- System.out.println("用户a没有查询权限");
! U# [8 r( w2 S$ m! p - }; q2 Y2 q5 ]) g2 W- m0 F
- }/ E) P3 Q% e4 T0 T3 e& J
- 2 y8 S& C; k0 Z$ e5 U1 {' X1 X
- }: D/ V+ p C) J
复制代码
, a; a: L, F# p7 `8 O; x
' {; e7 O1 F% F' z+ Y5 _8 Y0 W1 {( Q# _; O6 s
|
|