该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限
0 O; n- h; _9 `" U- public class Test {
' E4 m0 v" m0 m - # R( Y K1 N9 Q2 y% X1 T
- /**3 _8 x! _& A/ [9 P( T5 D
- * @param args
3 H* } b7 V. q4 Z. V' y - */2 w! h# |8 f+ B1 ^7 k
- public static void main(String[] args) {7 v4 }# x3 F2 g* N2 G* C K- P
6 ^+ k/ F1 P7 L4 @! X- /**/ y$ i7 w, J4 g2 ]* a4 z2 r3 ^
- * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
% P8 L- X" f, x - */( R* d" I; I: H& U
7 ? a* \& }" k6 [1 x- // 添加
" @/ ^ D; s& w: {" _; g - int c = 1;// ...0001% p( |! W0 q0 j$ D+ I- ~: J
- // 查询
4 B7 X, @! O9 M( e3 {: \ - int r = 2;// ...0010
, j6 U9 ?5 \! i% v( \ - // 修改
# [2 P4 e- B. @6 b% V7 J# N' C - int u = 4;// ...01009 C0 [8 [+ r8 U* `) h K/ p, Q
- // 删除
" E% j4 y: M2 } - int d = 8;// ...1000
2 o& ]1 |' O* J' Y" i - ( A) W$ Z: A& U
- /**
. O* p" U9 F! p$ w6 f# Y7 V - * / b* L2 e* f% d
- * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,+ x2 N& S1 S: G4 l# s$ J+ ~+ W
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0! w; T" v4 w# h3 e+ H& |- `9 {
- * / f5 f; p' [& J& A
- */
8 ?5 \3 m# v0 e8 ?
, v6 s1 t8 h: _ ]# e& t" c, M9 B- /**
: d- P& L+ |0 c/ {; D9 N3 S - *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作" j. o. j& u5 L8 H
- *
0 b. v- V% Q' ` g1 ]. \- u) `# } - */0 U7 I; a: b7 n5 q- d) F% Q8 R
7 A% U& n( `% |& k+ _5 Z" s- // 用户A有添加和修改权限/ [1 k. W \) j4 `6 L3 A8 o+ j
- int usera = c | r | u;, `" D+ F, p3 e; ^* h% x- A
7 a* [8 k5 T3 M) e8 m$ m! V- t4 _- // 用户B有添加和删除权限! f8 l% }( L9 F; m
- int userb = c | d;
1 Q; |7 b/ `, E9 W, p( j. D% |
$ G6 \ Z5 q: q' _- /**
2 Z+ b8 q2 |8 T4 C" I4 H" ]+ Q1 T3 p - * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
$ m. {+ z0 o; s# i - */; R/ V z O9 D: C' j( F
- 1 f2 J, i4 A5 I _( n: d
- if ((usera & u) == u) {
' C ]1 n8 F& N0 U - System.out.println("用户a有更新权限");
) h1 r9 A$ d" U% ^$ n# v - } else {, s0 L, J* b* k N
- System.out.println("用户a没有有更新权限");
$ ?; A0 g; A( `- K. ~. N3 i - }# T2 _# v* J0 u
+ u7 G8 [0 ]& i0 q9 }1 Y1 l- /**
% Y4 t; o3 P" [- T) x5 y - * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
" l/ o6 V! ?' x! l% w5 U, O - */; z, x6 P+ } o9 ?+ c! b& U
+ y$ N: C% f/ a) M( g' J* X- if ((userb & u) == u) {
& R6 ~9 c' C( Z4 } - System.out.println("用户b有更新权限");$ p! _; j2 u$ l6 J6 W- `
- } else {9 k/ J* Q. Z o# C( U; B
- System.out.println("用户b没有更新权限");: j3 J1 d' J- i+ c
- }
6 K$ D. V- }& O% W* o - $ d, M1 O8 ?3 q. K- ` Q
- // 给用户b添加更新权限
) N5 `4 N: _6 v - userb = userb | u;8 n1 E$ a1 C2 L5 K- Q
- ) o) K* p/ L: ~/ p% V' B& w+ H
- if ((userb & u) == u) {5 I% p, p, O2 U/ J. z
- System.out.println("用户b有更新权限");
+ o$ H+ G! X! }1 l5 ]5 ^0 p4 { - } else {
8 h. Y" I- P/ ~: ] - System.out.println("用户b没有更新权限");) b0 @( d) s5 n( I- ~
- }
* u) o- r- U4 m - * O2 t9 l) [4 e' ? z; [% l H
- /**% D7 E: U' D- A. I' H
- * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值& d' I0 J2 N' x ~+ t) @
- */6 h& l$ \# F9 r( z1 T2 }
- / @- i+ s, [" e3 a1 c
- if ((usera & r) == r) {
) h+ V* M- b# B. h: c& d9 o& c - System.out.println("用户a有查询权限");+ E% k0 A& x7 T. A! C
- } else {
% U& w, S0 T' m - System.out.println("用户a没有查询权限");/ ]# i, b; H0 x) \% G5 ^0 \5 H
- }
3 R+ s6 n* E* ~ - . c: j1 }$ b. {
- //取消用户a的查询权限: B$ r6 ?. i, |# u
- usera = usera & (~r);
/ b% x/ J+ D- s t4 J# a; _# w& J - ; E' \5 F* ~0 M( e
- if ((usera & r) == r) {
; ^5 G' G" u: g& J8 k/ x - System.out.println("用户a有查询权限");9 E* y6 A, n0 g' {( G9 i4 `( e& o, v
- } else {, O* o6 A# W8 }' l
- System.out.println("用户a没有查询权限");
( U Y W3 M; I) r. o+ s. e. b# } - }
{# e: \ J' l* Y: O - }
- i, L) a9 y( S - $ O" ]6 A! [; o) z9 {9 j5 D
- }
6 V7 J H& v: D2 K7 ~+ N! R
复制代码 ?" ^2 ]+ z5 U, m5 m1 \. ?
8 Y# S* B/ H2 j$ @
0 u* y& G: x8 \. n
|
|