RBAC 역할 기반 액세스 컨트롤 (8 장면 재생)

첫 번째 질문은 세계 권위가 무엇인지 코드에 던져 질 것입니다?

  • 권위 대신 URL

어떻게 액세스 제어를 달성하기 위해?

다음은 제어 흐름의 자세한 사항

간단한 액세스 제어 1.1 - 테이블 구조

简单权限控制,三个model,五张表

권한 테이블 허가

  • URL 권한 url 주소를 정규 표현식 ^ $
  • 제목 제목

역할 테이블 역할

  • 이름 역할 이름
  • 권한-many 연관 허용 테이블

사용자 테이블 사용자

  • 사용자 이름 사용자 이름
  • 암호를 암호
  • 둘 다 역할 협회의 역할

관계형 테이블의 역할 및 권한

사용자 및 역할에 대한 관계형 테이블

1.2 메뉴 - 테이블 구조

一级菜单: 在permission表中增加is_menu字段,区别该权限是否是菜单

권한 테이블

  • URL 권한 url 주소를 정규 표현식 ^ $

  • 제목 제목

  • 메뉴를 is_menu 여부

  • 아이콘 아이콘

1.3 보조 메뉴 - 테이블 구조

二级菜单: 实现二级菜单功能时,需要增加第六张表menu,在权限表中加入外键,关联menu表,有menu_id 当前的权限是二级菜单 没有menu_id 当前的权限是普通的权限

표 메뉴

  • 메뉴 제목 이름
  • 아이콘 아이콘

권한 테이블

  • URL 권한 url 주소를 정규 표현식 ^ $

  • 제목 제목

  • 이 현재의 권한 menu_id 메뉴는 현재 한 외래 키 메뉴 메뉴 표에는 권한은 일반 권한을 menu_id 없습니다

두 번째 메뉴 메뉴 종류의 1.4 - 테이블 구조

要对一级菜单排序,在menu中加入weight权重字段

표 메뉴

  • 메뉴 제목 이름

  • 아이콘 아이콘

  • 체중 정수

1.5 비 메뉴 소유권

权限归属,在menu表中加入parent外键,自关联权限表, 有parent_id当前的权限是子权限, 没有parent_id 当前的权限是父权限 ,即二级菜单

권한 테이블

  • URL 권한 url 주소를 정규 표현식 ^ $
  • 제목 제목
  • 외래 키 메뉴 - 현재 테이블과 연관된 메뉴는 권한없는 기관이 일반 권한을 menu_id하지 보조 메뉴가 현재 menu_id있다
  • 부모 외래 키 - 관련 권한 테이블 - 자기 상관은 부 전류 권한 권한 권한은 현재 PARENT_ID 권한이 부모 메뉴 아니다 PARENT_ID있다

- 테이블 구조 :

  • 메뉴 메뉴 테이블

    • 제목 제목
    • 아이콘 아이콘
    • 체중 권한
  • 권한 권한 테이블

    • URL 권리, URL 경로, 정규식 ^ $
    • 제목 제목
    • URL 별칭 이름을 만
    • 메뉴 외래 키 - 관련 메뉴 목록, 빈 = 사실, 널 (null) = 사실, (사용하여 두 개의 메뉴)
      • 이 menu_id되어, 현재의 권한, 보조 메뉴입니다
      • 어떤 menu_id 현재 권한은 일반 권한 없다
    • 부모 자기 협회는 (비 기득권 메뉴를 사용하는)
      • menu_id 아동 권리가있다
      • 부모 권한은 PARENT_ID 아니다
    • is_menu 부울 값, 메뉴 사용
    • 아이콘, 메뉴 사용
  • 역할 역할 테이블
    • 역할의 이름을 이름,
    • 허가-many 연관 허용 테이블
  • 사용자의 사용자 테이블
    • 사용자 이름 사용자 이름
    • 암호를 암호
  • 표 role_permission 역할 및 권한
  • 사용자 및 역할 USER_ROLE 표

- 데이터 구조 (공정 기술 점 +)

1. 간단한 액세스 제어
  • 세션에 저장된 성공적으로 착륙 권한 정보 후

    • 권한 데이터 구조

      permission_list = [{url},]
  • 미들웨어 -

    -(校验成功,return None,校验失败继续执行)

    • 현재의 액세스의 URL 경로를 가져옵니다
    • 화이트리스트 확인
    • 로그인 상태를 확인
    • 무료 인증 주소 확인
    • 권한을 확인
      • sission에서 허가를 받아야
      • 자전거 권한, 정규 경기
  • 주형
    • 마스터 및 상속
2. 동적 메뉴를 생성
  • 성공적으로 sission에 저장하는 사용자 권한 로그

    • 권한 데이터 구조

      permission_list=[{url},]
    • 메뉴 데이터 구조

    menu_list=[{url:,title:,icon:,},]
  • 미들웨어

    校验成功,return None,校验失败继续执行

    • 현재의 액세스의 URL 경로를 가져옵니다
    • 화이트리스트 확인
    • 로그인 상태 확인
    • 무료 인증 경로 검증
    • 권한을 확인
      • 세션에서 허가를 받아야
      • 자전거 권한, 정규 경기
  • 석사

    • inclusion_tag
    • 동적 메뉴 생성
      • 정의 inclusion_tag
      • 이순신, 순환 men_list에 대해서 가지고 있던 메뉴를 생성
3 개의 메뉴를 동적으로 생성
  • 사용자 권한을 저장하는 성공적인 로그인 세션 후

    • 권한리스트 데이터 구조

      permission_list ={{url:,},}
    • 메뉴 사전 데이터 구조

      menu_dict={一级菜单ID:{
          title:
          icon:
          children:[{
              url:
              title:
          },]
      },}
  • 미들웨어

    • 현재의 액세스의 URL 경로를 가져옵니다
    • 화이트리스트 확인
    • 로그인 상태 확인
    • 무료 인증 경로 검증
    • 권한을 확인
      • 세션에서 허가를 받아야
      • 자전거 권한, 정규 경기
  • 주형

    • 템플릿 및 상속

    • 두 동적으로 생성 된 메뉴

      • 사용자 정의 inclusion_tag

      • menu_dict.values에 루프에 대한 두 ()

4 개의 메뉴를 동적으로 생성 (메뉴 순서)
  • sission에서 사용자 권한을 성공적으로 저장 취득에 로그인

    • 권한리스트 데이터 구조

      permission_list= [{url},]
    • 메뉴 사전 데이터 구조

      menu_dict = {一级菜单的id:{
          title:
          icon:
          weight:
          children:[{
              url:
              title:
          },]
      },}
  • 미들웨어

    • 미들웨어
      • 현재의 액세스의 URL 경로를 가져옵니다
      • 화이트리스트 확인
      • 로그인 상태 확인
      • 무료 인증 경로 검증
      • 권한을 확인
        • 세션에서 허가를 받아야
        • 자전거 권한, 정규 경기
  • 주형

    • 마스터 및 상속

    • 두 번째 수준의 메뉴와 메뉴 순서를 생성

      • 사용자 정의 inclusion_tag
      • 분류의 menu_diact 사전 종류, 주문한 사전 OD에 추가

      • 두 루프, 반환) (사전 od.values를 주문

두 메뉴를 동적으로 생성 (제 메뉴가 디폴트로 선택되어, 확장)
  • 사용자 권한을 저장하는 성공적인 로그인 세션 후

    • 권한리스트 데이터 구조

      permission_list =  [{url}]
    • 메뉴 사전 데이터 구조

      menu_dict= {一级菜单id:{
          title:
          icon:
          weight:
          children:[{
              url:
              title:
          },]
      },}
  • 미들웨어

    • 현재의 액세스 경로의 URL 주소를 가져옵니다
    • 화이트리스트 확인
    • 상태 검사 로그인
    • 인증없는 주소 확인
    • 권한을 확인
      • 세션에서 허가를 받아야
      • 자전거 권한, 정규 경기
  • 주형
    • 마스터 및 상속
    • 두 동적 메뉴를 생성 및 정렬, 확장
      • 사용자 정의 inclusion_tag
      • 현재 URL을 가져옵니다
      • 분류의 menu_diact 사전 종류, 주문한 사전 OD에 추가
      • 메뉴 추가 클래스를 순환 = '숨기기'
      • 순환 보조 메뉴, 일반 일치하는 URL, 매칭이 성공하면
        • 보조 메뉴 플러스 클래스 = '활성화'
        • 메뉴 클래스 = ''
      • 루프 두) (사전 od.values을 주문 돌려주는
6.이 동적으로 생성 된 메뉴 (비 허가 홈 메뉴에서 두 개의 하위 메뉴 확대 권리)
  • 사용자 권한을 저장하는 성공적인 로그인 세션 후

    • 권한리스트 데이터 구조

      permission_list = [{
          url:
          id:
          pid:
      },]
    • 메뉴 사전 데이터 구조

      menu_dict = {一级菜单id:{
          title:
          icon:
          weight:
          children:[{
              url:
              title:
              id:
          },]
      },}
  • 미들웨어

    • 현재의 액세스의 URL 경로를 가져옵니다
    • 화이트리스트 확인
    • 없음 = request.current_menu_id 인덱스 어드레스에 액세스 --- 무료 인증 모든 보조 메뉴가 닫혀 있는지 없도록
    • 로그인 상태를 확인
    • 무료 보증 수표
    • 권한을 확인
      • sission이 취소 허가를 얻
      • 자전거 권한, 정규 경기
      • 가져 오기 사용 권한 목록 ID와 PID
        • PID가 존재하지 않을 경우, 현재 사용 권한은 보조 메뉴, 패키지, ID로 요청 ID = request.current_menu_id입니다 --current 전류 -
        • PID가 존재하면, 현재의 허가 보조 메뉴 PID를 식별 패키지, 즉 requst하는 헤드셋 메뉴 request.current_menu_id = PID이며
  • 주형

    • 마스터 및 상속

    • 2 차 메뉴를 생성 보조 메뉴가 아동의 권리를 확장 선택

      • 사용자 정의 inclussion_tag
      • 현재 URL을 가져옵니다
      • 메뉴 레벨의 정렬 종류, 주문한 사전 OD에 추가
      • 메뉴 추가 클래스를 순환 = '숨기기'
      • 환상 부 메뉴, 메뉴 결정이 두 개의 아이디가 동일 request.current_menu_id
        • 두개의 메뉴가 동일 클래스에 첨가 = 숨기기 삭제 '활성'메뉴 클래스 클래스 = '
      • od.values를 반환하는 루프에 대한 두 ()
7. 경로 탐색
  • 성공적으로 sission에 저장하는 사용자 권한 로그

    • 권한 사전 데이터 구조

      permission_dict ={权限id:{   # 可以根据子权限的pid获取父权限的字典
          url:,
          id:,
          pid:,
          title:,
          },} 
    • 메뉴 사전 데이터 구조

      menu_dict = {一级菜单id:{
          title:
          icon:
          weight:
          children:[{
              url:
              title:
              id:
          },]
      },}
  • 미들웨어
    • 현재의 액세스의 URL 경로를 가져옵니다
    • 화이트리스트 확인
    • 없음 = request.current_menu_id 인덱스 어드레스에 액세스 --- 무료 인증 모든 보조 메뉴가 닫혀 있는지 없도록
    • request.breadcrumb_list = [{ '제목': '홈', 'URL': '/ 지수 /'}] --- 탐색 경로 무료 추가 인증 정보
    • 로그인 상태 확인
    • 인증없는 주소 확인
    • 권한을 확인
      • sission에서 허가를 받아야
      • 자전거 권한 permissions_dict.vlaues, 정규 경기
      • 가져 ID와 PID
        • PID가 보조 메뉴가 존재하지 않는 경우,
          • ID = request.current_menu_id
          • 두 개의 메뉴 정보 --request.breadcurmb_list.append 캡슐화 ({ '제목'I [ '제목', 'URL'I [ 'URL']})
        • PID 경우, 아동의 권리 존재
          • 상위의 권한 p_permissions = permissions_dict [STR ( '딕셔너리')]
          • PID = request.current_menu_id
          • 두 개의 메뉴 정보 --request.breadcurmb_list.append 캡슐화 ({ '제목'p_permissions [ '제목', 'URL'p_permissions [ 'URL']})
          • 권한 서브 메뉴 정보 패키지 --request.breadcurmb_list.append ({ '제목'I [ '제목', 'URL'I [ 'URL']})
  • 주형

    • 마스터 및 상속

    • 2 차 메뉴를 생성 보조 메뉴가 아동의 권리를 확장 선택

      • 사용자 정의 inclussion_tag
      • 현재 URL을 가져옵니다
      • 메뉴 레벨의 정렬 종류, 주문한 사전 OD에 추가
      • 메뉴 추가 클래스를 순환 = '숨기기'
      • 환상 부 메뉴, 메뉴 결정이 두 개의 아이디가 동일 request.current_menu_id
        • 두개의 메뉴가 동일 클래스에 첨가 = 숨기기 삭제 '활성'메뉴 클래스 클래스 = '
      • od.values를 반환하는 루프에 대한 두 ()
    • 빵 부스러기
      • 사용자 정의 inclusion_tag
      • 获取 breadcurmb_list = request.breadcrumb_list
      • 루프 request.breadcrumb_list에 대한 하나의
버튼 8. 레벨 액세스 제어
  • 세션에 성공적으로 로그인 한 후 사용자 권한을 저장

    • 권한 사전 데이터 구조

      permisssions_dict={url别名:{
          url:
          id:
          pid:
          pname:
      },}
    • 메뉴 사전 데이터 구조

      menu_dict = {一级菜单id:{
          title:
          icon:
          weight:
          children:[{
              url:
              title:
              id:
          },]
      },}
  • 미들웨어

    • 현재의 액세스의 URL 경로를 가져옵니다

    • 화이트리스트 확인
    • request.current_menu_id = 없음
    • request.breadcrumb_list = [{ '획' '主页', 'URL' '/ 색인 /'}]
    • 로그인 상태 확인
      • sission에서 허가를 받아야
      • 자전거 권한 permissions_dict.vlaues, 정규 경기
      • 가져 ID와 PID
        • PID가 존재하지 않는 경우, 현재의 URL를 보조 메뉴입니다
          • ID = request.current_menu_id
          • request.breadcrumb_list.append ({ '제목'I [ '제목', 'URL'I [ 'URL']})
        • PID가있는 경우, 현재의 URL를 아동 권리입니다
          • 상위 저작권을 획득 (2 단째) 정보 p_permissions permissions_dict = [I [ 'PNAME']
          • PID = request.current_menu_id
          • request.breadcrumb_list.append ({ '제목'p_permissions [ '제목', 'URL'p_permissions [ 'URL']})
          • request.breadcrumb_list.append ({ '제목'I [ '제목', 'URL'I [ 'URL']})
  • 주형

    • 마스터 및 상속

    • 두 번째 수준의 메뉴 / 메뉴를 생성하면 홈 메뉴로 정렬 / 비 권한, 권한을 확장하는 두 개의 하위 메뉴를 선택

      • 사용자 정의 inclussion_tag
      • 현재 URL을 가져옵니다
      • 메뉴 레벨의 정렬 종류, 주문한 사전 OD에 추가
      • 메뉴 추가 클래스를 순환 = '숨기기'
      • 환상 부 메뉴, 메뉴 결정이 두 개의 아이디가 동일 request.current_menu_id
        • 두개의 메뉴가 동일 클래스에 첨가 = 숨기기 삭제 '활성'메뉴 클래스 클래스 = '
      • od.values를 반환하는 루프에 대한 두 ()
    • 빵 부스러기

      • 사용자 정의 inclusion_tag
      • 获取 breadcurmb_list = request.breadcrumb_list
      • 루프 request.breadcrumb_list에 대한 하나의
    • 버튼에 대한 액세스 제어

      • 사용자 정의 필터 --has_permission
      • permission_dict에서 프런트 엔드 이름에 패스를 분석,
        • True를 반환있다
        • 더 리턴 거짓이 없다
      • 판사 {% 경우 요청 | has_permission : 이름 %} html 파일 님 {% endif %}에서

추천

출처www.cnblogs.com/bigox/p/11203274.html