该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限+ y3 ~: V. O: D
- public class Test {# q" S) f2 W) B, D5 ~
- % ~4 O+ i+ o& N6 j
- /**
3 _$ i' {/ u, X2 H6 D# w% Q' C/ S - * @param args4 B4 x9 q% p' n4 a$ M
- */' J) \% a z& s
- public static void main(String[] args) {3 q3 K' V- ~( E
- 4 \$ k! m- `! N: ~" l3 S- k
- /**" f" t' Y6 s7 y' |4 z2 h% Z% S, X' U2 O
- * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
- {* r; \8 _1 w, _1 n1 M - */3 i$ M0 S; G: o; K' ~" k
- * M5 L- T( ?' n" b7 u" q/ {
- // 添加
& [' _% ~& [5 A# B q) N - int c = 1;// ...0001# p+ T! h: @- v# t' T+ V
- // 查询5 w7 x# w5 h5 P. f+ k
- int r = 2;// ...0010
/ w+ f& l2 Z `% x. r* w0 m - // 修改
3 [0 M9 |3 h/ [) a z' `3 r: W, p - int u = 4;// ...0100
* K! [% r2 Q2 U" \8 x - // 删除1 |! h" O z; ^( _. a5 }
- int d = 8;// ...1000
7 q0 _9 L/ K9 i0 n6 E& t
$ Q4 V a" V/ p# E: ]# g5 s# G3 N, a- /**
" R7 k2 P8 \/ } - * 2 f" r( u8 }( O1 @
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,
! Q# l9 j* @3 g! k! ^2 z3 K - * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
' X) ?+ `+ L) s. V - * , h: `# J/ _. M1 k* B6 f
- */
/ F# Q, H3 Y& N- d, d - + l4 Z4 z- g: d9 ?2 h/ [
- /**
. U* z, S L& s5 ^. u5 @ - *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作
4 Z' v/ j, i3 a% ]5 H - * 8 {; @0 H5 l9 U* D+ M0 ]
- */
" v# x5 E9 R4 m' D- Q - ( T2 S; D0 w6 q" y
- // 用户A有添加和修改权限
9 E$ @' t. V# }3 M& o - int usera = c | r | u;
$ \8 h% P' l* Q - 1 N1 G6 N) ~. ^' U. e/ f6 l
- // 用户B有添加和删除权限
. V7 a+ }9 `# V1 m - int userb = c | d;
( I) U/ d0 C: v - 5 K+ E/ ?4 o5 S6 |" C
- /**/ C, `, v( L% c5 E+ s7 ]
- * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限0 K9 v" x2 N4 \* U0 \, h: ]
- */7 ?7 l9 H+ \- T/ E3 O3 Q
- . l y d W. w: L, l8 p) |
- if ((usera & u) == u) {
3 w7 e& A4 {. f$ o - System.out.println("用户a有更新权限");
3 a# r/ L$ l$ A& ^ - } else {
$ F' Q3 t( y y7 U+ C - System.out.println("用户a没有有更新权限");
' t; _8 }( U5 R - }) _% Z) b. Q8 i8 {! K
- M' Q+ C7 V3 d5 ?2 E' S* ~
- /**
9 K7 I: a2 N4 k m - * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
7 _# E: ^: b/ A- o) l - */8 j8 w+ W# _& O* |- \
Z& r4 ]# E$ U- E' S4 c- if ((userb & u) == u) {2 N& D8 u* g: |1 \7 e
- System.out.println("用户b有更新权限");8 V6 T- D# f4 _' G6 l, D' B T
- } else {
: Y5 N g- m/ b" Y - System.out.println("用户b没有更新权限");
) l/ w) ^9 C8 E - }8 l" F8 C& h* r9 c' M! a
; @3 W x5 h" D2 k/ L Q, s1 A- // 给用户b添加更新权限6 x5 X9 L: N% c% e# L5 D- Y
- userb = userb | u;
6 I7 Y) f& H( @6 S
- ~! y. H; G7 S, \- if ((userb & u) == u) {0 Z- _' h2 H9 f/ j, c% U. R) k
- System.out.println("用户b有更新权限");
9 s! _; l3 J3 j% K - } else {9 ]7 D. K6 W+ b1 I- ~3 a
- System.out.println("用户b没有更新权限");/ X7 v! W8 F6 ^, f5 d4 X d) \
- }! o) q6 a( B1 r3 A9 j
3 S8 k. N: c( |* o1 s0 w- /** C8 x& J/ u. _2 j
- * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
! A4 Q( F* q9 }( W - */
9 [: J$ F+ k1 [3 S# S$ h - 1 g L) i8 ~/ b5 J$ m, D
- if ((usera & r) == r) {
/ r+ g. g1 d3 b; \$ } B - System.out.println("用户a有查询权限");8 ]2 t5 J& I( Y) }
- } else {
; D) I4 T2 G- T& _/ G/ n5 U. J, I - System.out.println("用户a没有查询权限");0 N, w* t. h7 j) [- ^4 T" @
- }
0 r! G& c. `# x/ I& ~- { -
' O( T) h" A* V$ Z N9 v( c - //取消用户a的查询权限
5 t+ E) y0 u9 f6 j - usera = usera & (~r);/ ]* R1 j. ?& N% j$ A( }0 b
-
* S# c) N4 u$ Q# S4 n! ] - if ((usera & r) == r) {
, E2 ^2 z: C: s - System.out.println("用户a有查询权限");+ ?# T, D0 l! _, ]; M
- } else {
+ b/ Z7 X: k9 p" \2 W - System.out.println("用户a没有查询权限");: `/ R5 k8 B7 I( R
- }
' ~3 D# H5 y7 M+ [ - }# a% g' o# s3 n% [8 ^
- ; v% {: ?, f# H2 v2 {
- }
8 i: W/ l2 b9 p! P. _
复制代码
/ y8 F/ L2 X, F! n l" {; U. H3 y+ X, H) a
# V' i# V& x+ q# ?- `, a+ M: a |
|