비트 연산자는 사용자 권한을 구현하는 가장 좋은 방법이라고 생각합니다. 여기에서는 Mysql로 어떻게 구현할 수 있는지 보여주고 있습니다.
다음은 일부 샘플 데이터가있는 샘플 테이블입니다.
표 1 : 1,2,4,8..etc와 같이 비트와 함께 권한 이름을 저장하는 권한 테이블 (2의 배수)
CREATE TABLE IF NOT EXISTS `permission` (
`bit` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`bit`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
샘플 데이터를 테이블에 삽입하십시오.
INSERT INTO `permission` (`bit`, `name`) VALUES
(1, 'User-Add'),
(2, 'User-Edit'),
(4, 'User-Delete'),
(8, 'User-View'),
(16, 'Blog-Add'),
(32, 'Blog-Edit'),
(64, 'Blog-Delete'),
(128, 'Blog-View');
표 2 : 사용자 ID, 이름 및 역할을 저장하는 사용자 테이블 역할은 권한의 합계로 계산됩니다.
예 :
'User-Add'(비트 = 1) 및 'Blog-Delete'(비트 -64) 권한이있는 사용자 'Ketan'인 경우 역할은 65 (1 + 64)입니다.
'블로그보기'(비트 = 128) 및 '사용자 삭제'(비트 -4) 권한을 가진 사용자 'Mehata'인 경우 역할은 132 (128 + 4)입니다.
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`role` int(11) NOT NULL,
`created_date` datetime NOT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
샘플 데이터
INSERT INTO `user` (`id`, `name`, `role`, `created_date`)
VALUES (NULL, 'Ketan', '65', '2013-01-09 00:00:00'),
(NULL, 'Mehata', '132', '2013-01-09 00:00:00');
사용자의 권한 부여 로그인 후 권한을 얻기 위해 아래에서 쿼리 할 수있는 것보다 사용자 권한을로드하려는 경우 :
SELECT permission.bit,permission.name
FROM user LEFT JOIN permission ON user.role & permission.bit
WHERE user.id = 1
여기서 user.role "&"permission.bit는 다음과 같이 출력을 제공하는 비트 연산자입니다.
User-Add - 1
Blog-Delete - 64
날씨를 확인하려면 특정 사용자에게 사용자 편집 권한이 있는지
SELECT * FROM `user`
WHERE role & (select bit from permission where name='user-edit')
출력 = 행이 없습니다.
당신은 또한 볼 수 있습니다 : http://goo.gl/ATnj6j