该用户从未签到
|
直接给例子吧!例子中将讲解 1.权限表示 2.权限判断 3.添加权限 4.取消权限
9 t9 O( T @+ n( \" j- p, p0 I- public class Test {& A" q- \" W1 R6 q) @
- , \ }4 N7 ?$ N; a7 r9 p( I
- /**+ ]9 ^0 c5 g6 O. A4 {$ L4 S
- * @param args
% L1 ^! k4 \5 K - */
% D% \! {) L2 S - public static void main(String[] args) {& y0 N& ]: q5 m( c6 W
- 9 s& t2 L: r9 K8 s" ^2 o
- /**/ S3 {1 @7 ]* ^/ K
- * 四种权限 ,当前定义为int,以下二进制表示只取后四位作说明
; ]4 i; D9 d6 h) M0 e: z7 d - */
/ _* n, J, u5 N# b - 4 h3 c$ z2 U6 K- b4 [: k
- // 添加
& Y+ Z7 a& D: R2 x: u$ E7 O5 z+ I - int c = 1;// ...00019 P- Z0 u3 |5 i9 {/ T7 x8 R/ L# X3 ?
- // 查询! n, e% Y E! U: E4 x
- int r = 2;// ...0010# q) f& _$ b" K }. P+ @
- // 修改
( ~: b" i* ?9 Q) T3 r5 L - int u = 4;// ...0100
+ s2 t* P. I( ^ - // 删除
. D3 d7 n( i6 D i - int d = 8;// ...1000/ e+ N. ?9 h3 v/ c$ ]
2 [, `1 z B2 j4 F- /**
+ [" [( V4 j7 Y3 z/ v) R' B - *
1 l& {6 `. O4 K3 r! |) c - * 大家可以观察四种权限的二进制表示的规律 ,都是2的N次方,% ]9 n* F! h* c+ }2 J+ G
- * 就表示本身,添加权限有最后一位为其它为0,查询倒数第二位为1其它都为0,修改倒数第三个为1其它都为0,删除倒数第四个为1其它都为0$ A: K$ g! u! l
- *
+ v% b' l4 J' @) Z2 K2 K - */
' D. g: ~" L+ c1 i8 i - 7 A0 F/ R& [) M
- /**. N" D7 b P9 \% T% e( S
- *1111---- 这样表示有哪种权限时可以用 |(按位或) 操作5 g* C- U8 G8 A
- * / v% w; X6 U0 T$ T( @, r# f+ ^0 {* ~5 c
- */
+ B7 o/ ~- s; r1 N: ~1 ~
- p, q, T! W$ \" n4 q; H- // 用户A有添加和修改权限
2 p1 J6 T u3 q$ Y U D7 ? - int usera = c | r | u;
2 M$ O( T- n6 j @7 t - ; q# N; i% Y+ u' ^: R1 v6 S
- // 用户B有添加和删除权限' a+ u. r( G% x& @8 O
- int userb = c | d;
$ \; j ]4 G$ N - 6 J5 k" w; [9 A& W: J1 D
- /**+ |- C. B) O6 ?. Q/ Q# Z
- * 2222---- 判断用户是否有某种权限用用户权限和要判断的权限进行 &(按位与) 操作,结果为要判断的权限值时表示用户有此权限,否则没有此权限2 ]7 u! }% E, H- R" d, B" A1 Q( z) E
- */: }2 ?, q" E- D$ N- W
; E6 r7 W- P% a- if ((usera & u) == u) {" V2 w$ R. w* Q) T3 O" x3 \0 }& b
- System.out.println("用户a有更新权限");, B. a. T- S: M3 e4 n7 J* j% j( V! [
- } else {
$ N; t# b% L6 G: A2 K - System.out.println("用户a没有有更新权限");
5 p( f. e0 n: j! \ - }* s0 n7 c2 D" H- s# k
8 B! G" X* m- K7 e- /**8 a4 \9 S* `1 s/ g5 c
- * 3333---- 给用户添加权限用用户权限和要添加的权限|(按位或) 操作再覆盖之前权限值1 [# u9 d) U1 o3 B! S
- */
2 U; O7 l/ R& S: F" o7 I
. Q- x' _" U* ]. |7 n* p; r- if ((userb & u) == u) {8 n2 j% ^+ a) {, m' L
- System.out.println("用户b有更新权限");
3 t8 ?8 R0 C Z* l0 w - } else {
( U. W7 o& {6 ]5 x, r2 f - System.out.println("用户b没有更新权限");0 H! P4 |4 |% O [2 k) V
- }
$ [. H' c, }9 ^, J. F- _. [! p% c I
) H* |* f% G# w! s) s% S- // 给用户b添加更新权限
& W( o2 D R1 }. I2 V6 e - userb = userb | u;
) q5 F5 R$ ]' T5 Y1 @( Y+ x$ q - + z: g% x) c4 C' b* X1 x* V7 ~
- if ((userb & u) == u) {1 T/ C* @4 b. s0 ^
- System.out.println("用户b有更新权限");
. I# _" P1 O! _ - } else {3 j; ?% l8 U" S6 s$ G) [* O
- System.out.println("用户b没有更新权限");
; j: B; C5 v. m1 I! Y - }
- ?/ Z6 p3 C$ f+ s, h- _6 B - : Z! _+ |; p3 B$ m5 s5 l8 M
- /*** B- E! c ?# Y0 a( N0 k' c
- * 4444---- 取消用户某种权限,用用户权限和要取消的权限按位取反后进行按位 操作,再覆盖之前权限值" _+ o7 Y9 U `8 F3 R* N
- */& a( e. e/ b2 F6 s/ n" z
- ! J. A8 v. z. ^) ^4 @
- if ((usera & r) == r) {
) Q3 ^8 y U& q3 l8 @ - System.out.println("用户a有查询权限");+ y: s! \: a+ E; h
- } else {
7 ]& d# Y1 ^5 x5 k8 i - System.out.println("用户a没有查询权限");
: b/ O+ h4 y( w$ u - }1 [ J0 b# `/ o& _5 y) Z7 E
- 9 o4 t9 M0 U' C2 Z$ e; m. @
- //取消用户a的查询权限5 Y# l3 a5 D# t7 A1 r: G
- usera = usera & (~r);9 c4 J+ t( V! p0 F( i7 l' v
-
! \$ _& A9 k- n/ r1 D - if ((usera & r) == r) {/ t. j. w( D2 K6 m1 Y, T
- System.out.println("用户a有查询权限");9 m+ B; Z* V: D2 y7 e" ^' {
- } else {
8 m$ B+ I7 z- b - System.out.println("用户a没有查询权限");8 |* p) \3 V' O9 d E
- }
% T( `7 q, c2 Z6 U- ?; Q8 f - }
+ ?7 J1 |( K0 F; l# s% O" P - 9 Y8 K0 Y: ?# G' G) L; |: z
- } ~! {/ J0 r, }! i
复制代码 0 F) B* F5 @. z' a8 f
1 g: ]4 x/ e+ [
) [# ]) C3 u& p- K1 O
|
|