该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限" J$ `; M' b& z; Y+ X. j# n
- public class Test {
2 J8 k: \* l' T - 7 L% x: Q. b2 _! C1 P! g, s* r0 k
- /**
+ X6 ~ j0 t& D: Z! [/ ] - * @param args
+ C6 y2 X D' J& c+ w - */
. Z9 c' V2 O" @! v. i5 M - public static void main(String[] args) {9 \/ z _. k8 ^# H- ?# I, v
- 3 r. h9 M6 \* K4 v3 U; T0 [
- /**5 ~2 Q/ `% D" q: b9 j3 d) z+ i
- * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明2 @# `: u, f* D: ]
- */
& y# A+ @& P* G: f - # |6 p# X4 c- q2 S! L$ L
- // 添加7 Z7 F1 {" M! S' K$ q- u/ Z
- int c = 1;// ...00010 w" Q; `- j5 n
- // 查询, w, S6 r- @! s s# F& h# [
- int r = 2;// ...0010
( v# h" [4 X9 U, S - // 修改/ B% v" i4 }: J$ ]
- int u = 4;// ...0100
1 L. k6 Y- }- j, S) S - // 删除
V0 `+ {, u4 k2 h$ N1 F! l$ X - int d = 8;// ...10004 b1 b2 R# K5 i$ `6 T
- 4 N) p/ |- w% z- v9 \
- /**3 Q% c5 I( k: w% v$ ?5 d3 j( P& a" x
- *
: F ~% w, Q" K6 d6 L2 Q - * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,& \% C' s: T& S! D/ x
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为00 g' r3 D) ?. R1 f9 J/ Z
- *
) n( } L- B# l9 i - */
/ [) Z# R% H" w- }0 D# w- L) I - 8 a+ P, b$ i' z3 c9 P
- /**6 o$ q V. z) L0 a1 q+ S9 m; L
- *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作; [3 [9 N/ s: W# n' [
- * 0 H: y& g0 j: M) J4 O; ^
- */( v2 D4 a; ?3 b& G# P! R" ^
- w9 a8 Q- Z8 ?/ F1 _: ?- // 用户A有添加和修改权限
: p/ z7 I6 b" _7 l7 Z - int usera = c | r | u;
) N" J( A6 c* z3 `
& d8 X# C1 v$ g) k3 ?- // 用户B有添加和删除权限+ ~0 r% H3 E$ [ h8 p, q0 Z! V; m
- int userb = c | d;1 Y* h# p# i' _7 G9 ~0 P A
5 j7 R8 \6 k! I* ]+ @( ~0 U/ J+ j- /**# N% L g# R w. f
- * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限
- j8 ?% d+ r5 L9 P - */. Z+ @4 ?, J$ o" x8 g# F) [
% A& N! T$ i2 N5 b' y- if ((usera & u) == u) {
5 ]2 b( o& V9 d2 s4 z6 Z5 e2 N - System.out.println("用户a有更新权限");3 W0 L! K' t& s
- } else {
1 V7 y/ T' }# [" E - System.out.println("用户a没有有更新权限");
- @: `( j V, I2 E$ f K* C3 q - }* d e5 j' G" @# r% O+ I1 w( o2 o
- p2 e' g: F H# V: M' R, G- /*** s+ ^8 K8 w R, ^, i/ H
- * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值
& E, X# |+ R* ]1 ?2 k. H - */
$ {% E- _- _9 }' t" N - 7 E! Y6 [% }* x
- if ((userb & u) == u) {
7 F+ t: ` x( [ w/ d - System.out.println("用户b有更新权限");
8 ]# A2 U- t/ B3 X3 N% x - } else {
9 S+ {1 M+ q; B$ e% \6 |9 o - System.out.println("用户b没有更新权限");
0 H! B0 ?$ ?' |7 J7 X; C - }+ S" c/ H4 e, Z6 d2 Z4 J/ n/ S0 D
- : P% q0 Y! t4 c# ]6 Q( e! H) y
- // 给用户b添加更新权限' K+ K8 g9 m% j8 i1 H
- userb = userb | u;
6 L1 W$ E9 D: N* h
) k- E- D2 | O4 `* p5 u- if ((userb & u) == u) {/ L# g+ y* ^& g
- System.out.println("用户b有更新权限");
* }) @5 U w. J( Y0 s j7 I - } else {
6 ?! A# s0 ]9 y) T) t. ~ - System.out.println("用户b没有更新权限");6 v' L3 K( o2 _! G; B
- }
1 d& @& T1 M& N# I - ! @0 E- N1 L7 |6 F- w& Q& H
- /**
5 ^$ v; j, @- [, c: g - * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值
+ X: M0 F( ~1 o, I* q# \# T3 S - */" H6 m2 y; e: C# E& ?
-
: T5 o9 ^6 c& j# |( S k; E7 `+ ] - if ((usera & r) == r) {
4 i: T: b) c" Q6 { - System.out.println("用户a有查询权限");; r" ?6 i" e |( t6 s( S, l, O# k
- } else {8 L% z6 |, a: T
- System.out.println("用户a没有查询权限");
# z% h- S1 t+ u - }( X& U$ t! a* ]0 e P
- 2 B" i3 C- k! Z0 h
- //取消用户a的查询权限
! ?* w* _3 x% _- i% W - usera = usera & (~r);' c/ i+ s2 ?4 Z: H4 P9 [6 J( ?
-
; S( O- d7 q) H - if ((usera & r) == r) {& b/ M' q T6 D0 ]
- System.out.println("用户a有查询权限");
! o4 K5 Y% \1 h# C% D - } else { W- k' b- b$ W" P6 C5 h* U
- System.out.println("用户a没有查询权限");
6 m7 @6 f z# \: _ - }6 ~" T9 a7 S& u% U, Z' p
- }" [2 u4 l& _1 c. o6 _
6 l/ n/ ~5 t9 b) ^5 X* l$ ^1 k$ }- }
! {' \. p& c; n4 G+ j, v
复制代码 , [1 ~- B0 K* M2 E& A% R {- Z
2 ^0 d$ `0 {; M! X) T' R8 z' ^1 F1 f5 h& C9 b
|
|