|
该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限
$ R! h% @1 {1 B. U( {( K- public class Test {! @& w: T' m( f' J9 q
- ! E* Y+ \8 C" w8 z4 b0 [0 Y
- /**/ B. ~" P) p3 G9 @
- * @param args
/ v# y* U7 Y5 D, k. d: F- Z/ A1 H4 _ - */9 L' f& Q7 [- s) Y. P; J
- public static void main(String[] args) {! }8 ~# m- A$ X) T% R
0 @: g& d4 n/ y- /**
- p' ~, d. z! ?) O, f - * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
8 Y9 S! b- h( u3 Y; y" M4 y/ O - */& G0 f; V- `6 N6 ~+ ]# Z/ f5 x
- " a# c+ i2 i0 A: o8 I
- // 添加
) i8 p& N% Q# U; o. @5 ?3 A - int c = 1;// ...0001& u J1 k5 N( m# J+ `3 w) P
- // 查询% T' V F% G: P5 T9 A7 c
- int r = 2;// ...0010% ~, V7 x( K: v% \) }& Z
- // 修改3 E2 @3 G4 X* Q' r. I, r! P
- int u = 4;// ...0100
( q& k. A6 y; g3 V9 u. Y" q5 U% p* Y - // 删除' J) F+ O( J/ F) q, u
- int d = 8;// ...10003 @7 x* `4 q6 z% K) `
2 s9 w6 L/ Y0 \+ T* C- x- Y- /*** Y7 |+ W2 d4 U1 X6 i6 s, p& h, o
- * r7 L- m. K9 H: d2 \9 Z. H
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,
: P Z3 H6 e4 L9 m( B8 [( T w8 b% s - * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0
* _3 H- x# D/ r* Z' B/ N - * 6 t( G) Q/ E) W6 z0 e+ x
- */9 J2 y+ h) n& o) d- h5 {
1 F, G) R# j( k: ^! n2 v+ v9 C- /*** p, ~. }) e0 C
- *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作
/ o0 \% a$ Y% J" i - * " R+ U* ~/ j1 r5 d- Q$ I
- */
% c R4 e' `; `" L - , G; \. b2 y A0 j
- // 用户A有添加和修改权限$ Q. E3 c& D6 i$ ~
- int usera = c | r | u;
7 }1 W% F$ m9 b. P- v `- ^9 `; e
) i; {6 T4 c; t! a& ~0 w- // 用户B有添加和删除权限& T/ T* f2 ^ w# O; X
- int userb = c | d;! r/ ]/ h2 P. k p
- * g( v. X" \. f) l. l7 n$ r( @
- /**, y7 L& H. s7 e; }
- * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限9 L. S* \# c" ]3 D
- */) c2 Q& r4 Q4 t+ Z
- & C: @3 `0 W- p0 \
- if ((usera & u) == u) {2 J7 Z. N# @: i" a# l9 g; G2 W( N
- System.out.println("用户a有更新权限");
4 o- [! s- |; l7 D* g+ r - } else {. D9 w, ~; u, x# o' _& l) {* [
- System.out.println("用户a没有有更新权限");
. K1 z. K8 `- Q+ {7 Z8 t - }3 n# R L9 d, c; c% C4 v9 s
7 i3 T, M/ W/ H3 G- /**
% Z5 p" X; X4 M& D' t; G' f - * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
5 _: e u: |9 ~& U6 U - */" A5 P* T7 ~1 H( t3 A! H0 i( C
- : U/ M' L9 E0 I( h7 q
- if ((userb & u) == u) {
$ i% s# m. u5 `$ P$ g" q! _( b6 i, M - System.out.println("用户b有更新权限");* |0 v! C6 E9 ?" t+ K) K
- } else {
8 ^$ I! T8 R, d. `5 J# d - System.out.println("用户b没有更新权限");( R: P+ A6 ` W7 \$ C' h
- }
& t& M. A- }% x8 C% F5 B - , N6 T8 c% l3 `$ D [$ {% B& Q8 d
- // 给用户b添加更新权限' f7 n" q3 K6 s
- userb = userb | u;3 s$ ]/ A3 c/ |! ]2 N3 t; d7 D/ U
( Z& g/ G& z3 X5 |7 Q3 P- if ((userb & u) == u) {+ i5 L. E8 V" Z1 D
- System.out.println("用户b有更新权限"); |, X* T% |/ ~
- } else {
2 r0 P/ y& l5 R# }6 F - System.out.println("用户b没有更新权限");, N% C, F( l5 E3 C3 o
- }+ E! k I4 ]/ `/ c
1 ]1 g, o0 v5 u6 T- /**
6 |4 h' }: ~ b) c0 j2 A - * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值) T, F' P# V" S0 H- B9 ^6 P% L6 P
- */* e5 U: f2 s5 d
-
3 G6 w C+ C9 v0 [; b - if ((usera & r) == r) {6 d! W& {1 X+ l4 ?1 ?0 D: U
- System.out.println("用户a有查询权限");
2 P3 y) C A0 y8 Q$ ?4 a - } else {9 {/ c$ z0 ^1 Z# D3 g0 ?" I5 n
- System.out.println("用户a没有查询权限");+ H& s3 `! C1 p: ]/ u
- }
2 a" Z% M& ~* r: n5 d7 w -
; d- ? {% K% d( ]6 |- y* u - //取消用户a的查询权限/ n+ g) j4 n. c; D! e! \! H
- usera = usera & (~r);
( Y! a; [; ~: f+ ], G+ D) x - W9 `+ W D$ _ w
- if ((usera & r) == r) {- g. h' k! P! Z* \, P- a
- System.out.println("用户a有查询权限");
- ?3 m2 [" E c - } else {
8 a' d6 R( k9 W" d - System.out.println("用户a没有查询权限");
% V! U' Z1 d. r, u$ }, Q - }
2 a, p' }3 H! A& K+ F/ j - }
7 J7 H1 B7 p/ I! I' x2 @8 @7 \
& _ }5 L# W: o* h: F& \, a. U- }6 F$ T4 r2 b* a l: j& k9 j
复制代码
7 c2 y1 y; q2 N I; t* J2 K4 v" k, p8 W1 b, x3 [
* |+ ~8 h- }, W j# a |
|