비트 연산 은 ACL 권한 수여 와 인증 과정의 원리 분석 을 실현 한다.

모든 권한 관리 시스템 에서 ACL (Access Control List) 은 매우 중요 하고 없어 서 는 안 되 거나 없어 서 는 안 된다.권한 관 리 는 주로 권한 수여 와 인증 두 부분 을 포함 하 는데 다음은 ACL 이 권한 수여 와 인증 을 어떻게 실현 하 는 지 에 달 려 있다.
먼저 권한 수여 와 인증 이 무엇 인지 알 아야 한다.
권한 수여 에 대한 상세 한 설명:
1. 권한 수여
   a) 만약 에 사용자 A 가 캐릭터 B, 캐릭터 C 를 가지 고 있다 면 성 이 부족 한 경우 사용자 A 는 캐릭터 B 와 캐릭터 C 에 분 배 된 모든 권한 을 가진다 (즉, 기본 적 인 상황 에서 사용자 A 는 자신 이 가지 고 있 는 캐릭터 가 가 진 모든 권한 을 계승 한다).
   b) 사용자 가 여러 개의 역할 을 가지 고 있다 면 사용자 의 권한 은 이러한 역할 권한 의 집합 입 니 다.
   c) 사용자 가 여러 개의 역할 을 가지 고 있 고 캐릭터 간 의 권한 수여 가 충돌 할 경우 (예 를 들 어 같은 자원 에 대한 같은 조작, 한 캐릭터 는 '허용', 다른 캐릭터 는 '허용 하지 않 음') 우선 순위 가 높 은 캐릭터 로(우선 순위 란 이 사용자 가 가 진 역할 에 있어 순서 가 있 고 같은 캐릭터 가 서로 다른 사용자 에 게 서로 다른 우선 순 위 를 가 질 수 있다 는 것 이다).
   d) 캐릭터 에 대한 권한 수 여 를 제외 하고 사용자 에 대한 권한 수 여 를 할 수 있 습 니 다. 즉, 권한 을 사용자 에 게 부여 하 는 것 입 니 다. 특정한 자원 의 모든 작업 에 대해 저 희 는 이러한 권한 을 사용자 에 게 '계승' 또는 '계승 하지 않 음' 으로 설정 할 수 있 습 니 다.
       i. 계승: 이 권한 들 은 (즉 사용자) 가 가 진 캐릭터 의 권한 을 사용 하고 (즉 사용자) 가 단독으로 설정 한 권한 을 사용 하지 않 는 다 는 뜻 입 니 다.
       ii. 계승 하지 않 음: 이 권한 들 은 자신 이 가지 고 있 는 캐릭터 의 권한 을 사용 하지 않 고 단독으로 설정 한 권한 을 사용 한 다 는 뜻 입 니 다.
한 마디 로 권한 수 여 는 허가증 을 발급 하 는 과정 이다. 예 를 들 어 가이드 증 이 있 으 면 직장 에 갈 수 있다. 없 으 면 미안 하 다 면 놀 러 가라. 권한 수 여 는 가이드 증 을 수여 하 는 과정 과 같다.
필요 한 설명: 캐릭터 가 무엇 입 니까? 여기에 사용자 가 있 는데 왜 캐릭터 가 있어 야 합 니까? 사용자 와 캐릭터 는 어떤 차이 가 있 습 니까?
역할 은 추상 적 인 개념 이다. 역할 은 직위, 예 를 들 어 시스템 관리자, 부서 매니저 등 직위 로 이해 할 수 있 고 사용 자 는 구체 적 인 사람 이다. 한 사용 자 는 여러 직책 을 겸 할 수 있 고 한 직무 도 여러 사람 이 책임 질 수 있 기 때문에 인원 과 역할 은 여러 쌍 의 관계 이다.
인증 에 대한 상세 한 설명:
2. 인증 이란 사용자 가 자원 에 접근 할 때 권한 수여 에 따라 사용자 의 접근 을 허용 하 는 지 여 부 를 판단 하 는 것 을 말한다.
   a) 사용자 가 방문 할 때 즉각 적 인 판단 이 필요 합 니 다 (접근 할 권리 가 있 는 지 여부)
   b) 조회 기능 을 제공 해 야 합 니 다. 사용자 가 가 진 모든 권한 을 조회 할 수 있 습 니 다.
한 마디 로 인증 은 검사 과정 입 니 다. 당신 에 게 발급 한 가이드 증 은 출근 하기 전에 당신 에 대해 검 사 를 해 야 합 니 다. 만약 당신 이 가이드 증 이 없 는 것 을 검사 하면 미안합니다. 당신 은 출근 할 수 없습니다.
코드 에서 의 ACL 구현
권한 수여 와 인증 이 무엇 인지 알 게 되 었 습 니 다. 다음은 권한 수여 와 인증 이 코드 에 어떻게 나타 나 는 지 보 겠 습 니 다. 다음은 방문 제어 류 ACL 의 실현 입 니 다.
package com.lzq.model;

/**
 * ACL         
 */
public class ACL {
	/**
	 *     :                
	 */
	public static final int ACL_NEUTRAL = -1;
	public static final int ACL_NO = 0;
	public static final int ACL_YES = 1; 
	
	/**
	 *     ,     (bit)   CRUD  
	 */
	private int aclState;
	
	/**
	 *       ,0     ,1    
	 * 
	 */
	private int aclTriState;

	public int getAclState() {
		return aclState;
	}
	public void setAclState(int aclState) {
		this.aclState = aclState;
	}
	public int getAclTriState() {
		return aclTriState;
	}
	public void setAclTriState(int aclTriState) {
		this.aclTriState = aclTriState;
	}
	
	/**
	 * acl          
	 *          ,        
	 * @param permission    0、1、2、3
	 * @param yes true    ,false     
	 */
	public void setPermission(int permission,boolean yes){
		int temp = 1;
		temp =temp <<permission;
		if (yes) {
			aclState |= temp;
		}else {
			aclState &= ~temp;
		}
	}
	
	/**
	 *   ACL  
	 * @param permission C/R/U/D  
	 * @return     ,  /   /   
	 */
	public int getPermission(int permission){
		
		//    ,          
		if (aclTriState == 0xFFFFFFFF) {
			return ACL_NEUTRAL;
		}
		
		int temp = 1;
		temp = temp << permission;
		
		temp &=aclState;
		
		if (temp !=0) {
			return ACL_YES;
		}
		return ACL_NO;
	}
	
	/**
	 *            
	 * @param yes true    ,false     
	 */
	public void setExtends(boolean yes){
		//0xFFFFFFFF -1     
		if (yes) {
			aclTriState =0xFFFFFFFF;
		}else {
			aclTriState = 0;
		}
	}
	public static void main(String[] args) {
		System.out.println(0xFFFFFFFF);
	}
}

비트 연산 은 어떻게 권한 수여 와 인증 을 실현 합 니까?
오른쪽 에서 왼쪽으로 CRUD 를 대표 한다 고 가정 합 니 다. 그러면 우리 CRUD 의 코드 는 0123 (즉, 자 리 를 옮 길 때 옮 길 자릿수) 이 어야 합 니 다. 왜냐하면 우 리 는 자 리 를 옮 겨 인증 해 야 하기 때 문 입 니 다.
1. 권한 수여 와 취소 부분:
D 조작 으로 예 를 들 어 설명 한다.
int temp = 1 의 임시 변수 입 니 다. aclState 는 원본 권한 수여 상태 입 니 다. temp 의 바 이 너 리 코드 는 00000000 00000000 00000000 00000000 00001 입 니 다.
D 에 대응 하 는 코드 는 3 입 니 다. temp = temp < permission 에 따라 temp 을 왼쪽으로 3 자리 이동 합 니 다.
원본 권한 이 acl State = 00000000 00000000 00000000 0000001 이 라 고 가정 합 니 다.
변수 yes = true 일 때 권한 을 부여 합 니 다. temp 와 aclState 를 | 연산 합 니 다. temp 는 현재 권한 을 부여 할 위치 만 1 이 고, 구하 거나 연산 한 후에 aclState = 000000000000000000000000000000000000000001101 입 니 다. 이렇게 하면 권한 을 부여 합 니 다.
변수 yes = false 일 때 인증 을 취소 합 니 다. temp 를 다음 과 같이 되 돌 립 니 다.
한 마디 로 권한 을 부여 하 는 과정 은 바로 비트 연산 을 거 쳐 이동 후의 위치 (R 이동 1 위, 이동 후 대응 하 는 위 치 는 오른쪽 에서 왼쪽 두 번 째, U 이동 2 위, 이동 후 대응 하 는 위 치 는 오른쪽 에서 왼쪽 세 번 째) 를 1 로 바 꾸 는 것 이다. 권한 을 취소 하 는 것 은 비트 연산 을 거 친 후에 원래 상태 가 변 하지 않 는 것 이다.
코드 구현 은 다음 과 같 습 니 다.
/**
	 *          ,        
	 * @param permission    0、1、2、3
	 * @param yes true    ,false     
	 */
	public void setPermission(int permission,boolean yes){
		int temp = 1;
		temp =temp <<permission;
		if (yes) {
			aclState |= temp;
		}else {
			aclState &= ~temp;
		}
	}

2. 인증 부분:
인증 과정 과 권한 수여 과정 은 역 과정 이 라 고 볼 수 있다.
인증 에서 D 작업 을 예 로 들 면 먼저 계승 상 태 를 보고 계승 상태 aclTriState = - 1 (0xFFFFFFFF 가 - 1 인 패 치 표시) 은 권한 수여 상태 가 확정 되 지 않 았 음 을 나타 낸다.
int temp = 1 의 임시 변수 입 니 다. aclState 는 원본 권한 수여 상태 입 니 다. temp 의 바 이 너 리 는: 00000000 000000000 00000000 00001 입 니 다.
D 에 대응 하 는 코드 는 3 입 니 다. temp = temp < permission 에 따라 temp 을 왼쪽으로 3 자리 이동 합 니 다.
원본 권한 수여 상태 aclState = aclState = 00000000 00000000 00001101 을 가정 합 니 다.
임시 변수 temp 와 aclState 는 연산 을 합 니 다. temp = temp & aclState = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
한 마디 로 인증 실현 은 권한 수여 의 역 과정 이다. 권한 수여 상태 와 이동 후의 temp 를 연산 하고 결과 가 0 이 아니라면 ACL 권한 수 여 를 받 는 것 을 나타 낸다. 결과 가 0 이 라면 권한 수 여 를 받 을 수 없다 (권한 수여 과정 과 대응).
코드 구현 은 다음 과 같 습 니 다.
/**
	 *   ACL  
	 * @param permission C/R/U/D  
	 * @return     ,  /   /   
	 */
	public int getPermission(int permission){
		//    ,          
		if (aclTriState == 0xFFFFFFFF) {
			return ACL_NEUTRAL;
		}
		int temp = 1;
		temp = temp << permission;
		temp &=aclState;
		if (temp !=0) {
			return ACL_YES;
		}
		return ACL_NO;
	}

3. 본 권한 이 계승 되 었 는 지 설정
권한 은 캐릭터 뿐만 아니 라 사용자 에 게 도 직접 권한 을 부여 할 수 있 습 니 다. 사용자 에 게 직접 권한 을 부여 할 때 계승 여 부 를 판단 해 야 합 니 다.
계승 이란 이러한 권한 은 사용자 가 가지 고 있 는 캐릭터 의 권한 을 사용 하고 사용자 가 단독으로 설정 한 권한 을 사용 하지 않 는 다 는 것 을 의미한다.
계승 하지 않 음: 이 권한 들 은 자신 이 가지 고 있 는 캐릭터 의 권한 을 사용 하지 않 고 단독으로 설정 한 권한 을 사용 한 다 는 뜻 입 니 다.
yes 가 true 라면 aclTriState = - 1 은 본 권한 이 계승 되 었 음 을 나타 내 고 yes 가 false 라면 aclTriState = 0 은 본 권한 이 계승 되 지 않 음 을 나타 낸다.
코드 구현 은 다음 과 같 습 니 다.
/**
	 *            
	 * @param yes true    ,false     
	 */
	public void setExtends(boolean yes){
		//0xFFFFFFFF -1     
		if (yes) {
			aclTriState =0xFFFFFFFF;
		}else {
			aclTriState = 0;
		}
	}

비트 연산 안내
기본 적 인 비트 조작 부 호 는, 또는, 이 또는, 취 반, 왼쪽 이동, 오른쪽 이동 등 6 가지 가 있 는데 그들의 연산 규칙 은 다음 과 같다.
 
기호.
 묘사 하 다.
 연산 규칙        
&      
 ... 과
두 분 다 1 일 때 결과 가 1 이에 요.
|  
 혹시    
두 분 다 0 일 때 결과 가 0 이에 요.
^    
이변
두 자 리 는 0 이 고, 서로 다른 것 은 1 이다.
~   
반대 하 다
0 변 1, 1 변 0
<< 
왼쪽으로 이동
각 2 진 은 모두 왼쪽으로 몇 자 리 를 옮 기 고, 높 은 자 리 는 버 리 고, 낮은 자 리 는 0 을 보충한다.
>> 
오른쪽으로 이동 하 다
각 이 진 위 는 모두 오른쪽으로 몇 자 리 를 옮 깁 니 다. 기호 가 없 는 숫자, 높 은 위치 에 0 을 보충 하고 기호 가 있 습 니 다. 각 컴 파일 러 의 처리 방법 이 다 릅 니 다. 어떤 것 은 기호 위치 (산술 오른쪽으로 이동) 를 보충 하고 어떤 것 은 0 을 보충 합 니 다 (논리 적 오른쪽으로 이동).
다음 몇 가 지 를 주의 하 세 요.
1. 이 6 가지 조작 부 호 는 ~ 반 은 단일 항목 조작 부 이 고 나머지 5 가 지 는 모두 두 항목 조작 부 입 니 다.
2. 비트 작업 은 성형 데이터 에 만 사용 할 수 있 고 float 와 double 형식 에 대해 비트 작업 을 하면 컴 파일 러 에 의 해 잘못 보 고 될 수 있 습 니 다.
총결산
본 고 는 주로 권한 수여 와 인증 의 개념, 비트 연산 기초 에 대한 간단 한 소 개 를 소개 하고 비트 연산 을 통 해 권한 수여 와 인증 을 하 는 방법 을 소개 한다. 여러분 은 마지막 으로 제 시 된 비트 연산 표를 대조 하여 권한 수여 와 인증 과정 을 비교 하여 구체 적 으로 어떻게 실현 되 는 지 볼 수 있다.
사실 하나의 acl 권한 수여 기록 에는 aclState 와 aclTriState 를 제외 하고 역할, 자원 과 권한 수여 세 가지 정보 도 기록 되 어 있다. 구체 적 인 내용 은 뒷글 에서 소개 한다.

좋은 웹페이지 즐겨찾기