2019-03-22 11:03:55 +00:00
<!DOCTYPE html>
< html class = "theme-next muse use-motion" lang = "zh-Hans" >
< head > < meta name = "generator" content = "Hexo 3.8.0" >
< meta charset = "UTF-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, maximum-scale=1" >
< meta name = "theme-color" content = "#222" >
< meta http-equiv = "Cache-Control" content = "no-transform" >
< meta http-equiv = "Cache-Control" content = "no-siteapp" >
< link href = "/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel = "stylesheet" type = "text/css" >
< link href = "/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel = "stylesheet" type = "text/css" >
< link href = "/css/main.css?v=5.1.4" rel = "stylesheet" type = "text/css" >
< link rel = "apple-touch-icon" sizes = "180x180" href = "/images/apple-touch-icon-next.png?v=5.1.4" >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "/images/favicon-32x32-next.png?v=5.1.4" >
< link rel = "icon" type = "image/png" sizes = "16x16" href = "/images/favicon-16x16-next.png?v=5.1.4" >
< link rel = "mask-icon" href = "/images/logo.svg?v=5.1.4" color = "#222" >
< meta name = "keywords" content = "模型实现,python,访问控制," >
< meta name = "description" content = "基于python语言的BIBA模型图形界面实现一、实验目的: 查阅资料, 了解biba安全模型的相关知识 通过编程实现基于biba模型的完整性访问控制, 进一步掌握biba模型的规则 使用python语言实现, 熟练pyqt的图形界面设计方法 二、实验环境: 操作系统: Windows10 工具版本: python3.7, pyqt5 三、实验原理: 1. 什么是安全模型 系统的元素 具有行为能力的" >
< meta name = "keywords" content = "模型实现,python,访问控制" >
< meta property = "og:type" content = "article" >
< meta property = "og:title" content = "利用python实现BIBA模型" >
< meta property = "og:url" content = "https://cool-y.github.io/2018/11/16/BIBA访问控制模型实现(python)/index.html" >
< meta property = "og:site_name" content = "混元霹雳手" >
< meta property = "og:description" content = "基于python语言的BIBA模型图形界面实现一、实验目的: 查阅资料, 了解biba安全模型的相关知识 通过编程实现基于biba模型的完整性访问控制, 进一步掌握biba模型的规则 使用python语言实现, 熟练pyqt的图形界面设计方法 二、实验环境: 操作系统: Windows10 工具版本: python3.7, pyqt5 三、实验原理: 1. 什么是安全模型 系统的元素 具有行为能力的" >
< meta property = "og:locale" content = "zh-Hans" >
< meta property = "og:image" content = "https://github.com/Cool-Y/BIBA-model/blob/master/img/login.PNG" >
< meta property = "og:image" content = "https://github.com/Cool-Y/BIBA-model/blob/master/img/rootUI.PNG" >
< meta property = "og:image" content = "https://github.com/Cool-Y/BIBA-model/blob/master/img/existUser.PNG" >
< meta property = "og:image" content = "https://github.com/Cool-Y/BIBA-model/blob/master/img/normal.PNG" >
< meta property = "og:updated_time" content = "2019-03-22T09:59:29.078Z" >
< meta name = "twitter:card" content = "summary" >
< meta name = "twitter:title" content = "利用python实现BIBA模型" >
< meta name = "twitter:description" content = "基于python语言的BIBA模型图形界面实现一、实验目的: 查阅资料, 了解biba安全模型的相关知识 通过编程实现基于biba模型的完整性访问控制, 进一步掌握biba模型的规则 使用python语言实现, 熟练pyqt的图形界面设计方法 二、实验环境: 操作系统: Windows10 工具版本: python3.7, pyqt5 三、实验原理: 1. 什么是安全模型 系统的元素 具有行为能力的" >
< meta name = "twitter:image" content = "https://github.com/Cool-Y/BIBA-model/blob/master/img/login.PNG" >
< script type = "text/javascript" id = "hexo.configurations" >
var NexT = window.NexT || {};
var CONFIG = {
root: '/',
scheme: 'Muse',
version: '5.1.4',
sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":false,"onmobile":false},
fancybox: true,
tabs: true,
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
duoshuo: {
userId: '0',
author: '博主'
},
algolia: {
applicationID: '',
apiKey: '',
indexName: '',
hits: {"per_page":10},
labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
}
};
< / script >
< link rel = "canonical" href = "https://cool-y.github.io/2018/11/16/BIBA访问控制模型实现(python)/" >
< title > 利用python实现BIBA模型 | 混元霹雳手< / title >
< / head >
< body itemscope itemtype = "http://schema.org/WebPage" lang = "zh-Hans" >
< div class = "container sidebar-position-left page-post-detail" >
< div class = "headband" > < / div >
< header id = "header" class = "header" itemscope itemtype = "http://schema.org/WPHeader" >
< div class = "header-inner" > < div class = "site-brand-wrapper" >
< div class = "site-meta " >
< div class = "custom-logo-site-title" >
< a href = "/" class = "brand" rel = "start" >
< span class = "logo-line-before" > < i > < / i > < / span >
< span class = "site-title" > 混元霹雳手< / span >
< span class = "logo-line-after" > < i > < / i > < / span >
< / a >
< / div >
< p class = "site-subtitle" > < / p >
< / div >
< div class = "site-nav-toggle" >
< button >
< span class = "btn-bar" > < / span >
< span class = "btn-bar" > < / span >
< span class = "btn-bar" > < / span >
< / button >
< / div >
< / div >
< nav class = "site-nav" >
< ul id = "menu" class = "menu" >
< li class = "menu-item menu-item-home" >
< a href = "/" rel = "section" >
< i class = "menu-item-icon fa fa-fw fa-home" > < / i > < br >
首页
< / a >
< / li >
< li class = "menu-item menu-item-about" >
< a href = "/about/" rel = "section" >
< i class = "menu-item-icon fa fa-fw fa-user" > < / i > < br >
关于
< / a >
< / li >
< li class = "menu-item menu-item-tags" >
< a href = "/tags/" rel = "section" >
< i class = "menu-item-icon fa fa-fw fa-tags" > < / i > < br >
标签
< / a >
< / li >
< li class = "menu-item menu-item-categories" >
< a href = "/categories/" rel = "section" >
< i class = "menu-item-icon fa fa-fw fa-th" > < / i > < br >
分类
< / a >
< / li >
< li class = "menu-item menu-item-archives" >
< a href = "/archives/" rel = "section" >
< i class = "menu-item-icon fa fa-fw fa-archive" > < / i > < br >
归档
< / a >
< / li >
< / ul >
< / nav >
< / div >
< / header >
< main id = "main" class = "main" >
< div class = "main-inner" >
< div class = "content-wrap" >
< div id = "content" class = "content" >
< div id = "posts" class = "posts-expand" >
< article class = "post post-type-normal" itemscope itemtype = "http://schema.org/Article" >
< div class = "post-block" >
< link itemprop = "mainEntityOfPage" href = "https://cool-y.github.io/2018/11/16/BIBA访问控制模型实现(python)/" >
< span hidden itemprop = "author" itemscope itemtype = "http://schema.org/Person" >
< meta itemprop = "name" content = "Cool-Y" >
< meta itemprop = "description" content >
< meta itemprop = "image" content = "/images/avatar.gif" >
< / span >
< span hidden itemprop = "publisher" itemscope itemtype = "http://schema.org/Organization" >
< meta itemprop = "name" content = "混元霹雳手" >
< / span >
< header class = "post-header" >
< h1 class = "post-title" itemprop = "name headline" > 利用python实现BIBA模型< / h1 >
< div class = "post-meta" >
< span class = "post-time" >
< span class = "post-meta-item-icon" >
< i class = "fa fa-calendar-o" > < / i >
< / span >
< span class = "post-meta-item-text" > 发表于< / span >
< time title = "创建于" itemprop = "dateCreated datePublished" datetime = "2018-11-16T15:35:27+08:00" >
2018-11-16
< / time >
< / span >
< span class = "post-category" >
< span class = "post-meta-divider" > |< / span >
< span class = "post-meta-item-icon" >
< i class = "fa fa-folder-o" > < / i >
< / span >
< span class = "post-meta-item-text" > 分类于< / span >
< span itemprop = "about" itemscope itemtype = "http://schema.org/Thing" >
< a href = "/categories/理论学习/" itemprop = "url" rel = "index" >
< span itemprop = "name" > 理论学习< / span >
< / a >
< / span >
< / span >
< span class = "post-comments-count" >
< span class = "post-meta-divider" > |< / span >
< span class = "post-meta-item-icon" >
< i class = "fa fa-comment-o" > < / i >
< / span >
< a href = "/2018/11/16/BIBA访问控制模型实现(python)/#comments" itemprop = "discussionUrl" >
< span class = "post-comments-count gitment-comments-count" data-xid = "/2018/11/16/BIBA访问控制模型实现(python)/" itemprop = "commentsCount" > < / span >
< / a >
< / span >
< span id = "/2018/11/16/BIBA访问控制模型实现(python)/" class = "leancloud_visitors" data-flag-title = "利用python实现BIBA模型" >
< span class = "post-meta-divider" > |< / span >
< span class = "post-meta-item-icon" >
< i class = "fa fa-eye" > < / i >
< / span >
< span class = "post-meta-item-text" > 阅读次数: < / span >
< span class = "leancloud-visitors-count" > < / span >
< / span >
< / div >
< / header >
< div class = "post-body" itemprop = "articleBody" >
< h1 id = "基于python语言的BIBA模型图形界面实现" > < a href = "#基于python语言的BIBA模型图形界面实现" class = "headerlink" title = "基于python语言的BIBA模型图形界面实现" > < / a > 基于python语言的BIBA模型图形界面实现< / h1 > < h2 id = "一、实验目的:" > < a href = "#一、实验目的:" class = "headerlink" title = "一、实验目的:" > < / a > 一、实验目的:< / h2 > < ol >
< li > < strong > 查阅资料, 了解biba安全模型的相关知识< / strong > < / li >
< li > < strong > 通过编程实现基于biba模型的完整性访问控制, 进一步掌握biba模型的规则< / strong > < / li >
< li > < strong > 使用python语言实现, 熟练pyqt的图形界面设计方法< / strong > < / li >
< / ol >
< hr >
< h2 id = "二、实验环境:" > < a href = "#二、实验环境:" class = "headerlink" title = "二、实验环境:" > < / a > 二、实验环境:< / h2 > < ul >
< li > 操作系统: Windows10< / li >
< li > 工具版本: python3.7, pyqt5< / li >
< / ul >
< hr >
< h2 id = "三、实验原理:" > < a href = "#三、实验原理:" class = "headerlink" title = "三、实验原理:" > < / a > 三、实验原理:< / h2 > < h4 id = "1-什么是安全模型" > < a href = "#1-什么是安全模型" class = "headerlink" title = "1. 什么是安全模型" > < / a > 1. 什么是安全模型< / h4 > < ul >
< li > 系统的元素 < blockquote >
< p > 具有行为能力的主体< br > 不具有行为能力的客体< / p >
< / blockquote >
< / li >
< li > 系统的操作行为< blockquote >
< p > 可以执行的命令:读、写、执行< / p >
< / blockquote >
< / li >
< li > 对系统行为的约束方式< blockquote >
< p > 对行为的控制策略< / p >
< / blockquote >
< / li >
< li > 模型从抽象层次规定了系统行为和约束行为的方式< / li >
< li > 模型往往用状态来表示< blockquote >
< p > 系统行为所依赖的环境< br > 行为对系统产生的效果< / p >
< / blockquote >
< h4 id = "2-biba完整性模型: " > < a href = "#2-biba完整性模型: " class = "headerlink" title = "2. biba完整性模型: " > < / a > 2. biba完整性模型: < / h4 > < ul >
< li > 完整性威胁问题< blockquote >
< p > 完整性的威胁就是一个子系统在初始时刻认为不正常的修改行为;< br > 来源:内部& 外部;< br > 类型:直接& 间接< / p >
< / blockquote >
< / li >
< / ul >
< / li >
< / ul >
< table >
< thead >
< tr >
< th > 外部的直接< / th >
< th > 外部的间接< / th >
< th > 内部的直接< / th >
< th > 内部的间接< / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > 外部系统恶意地篡改另一个系统的数据或程序< / td >
< td > 一个外部系统插入恶意的子程序< / td >
< td > 修改自己的代码< / td >
< td > 修改自己的指针< / td >
< / tr >
< / tbody >
< / table >
< ul >
< li > biba模型的完整性定义< blockquote >
< p > 完整性级别高的实体对完整性低的实体具有完全的支配性,反之如果一个实体对另一个实体具有完全的控制权,说明前者完整性级别更高,这里的实体既可以是主体也可以是客体。< br > 完整性级别和可信度有密切的关系,完整级别越高,意味着可信度越高。< / p >
< / blockquote >
< / li >
< li > biba模型的规则 < / li >
< / ul >
< ul >
< li style = "list-style: none" > < input type = "checkbox" > 对于写和执行操作,有如下规则:< blockquote >
< p > < strong > 写规则控制< / strong > < br > 当且仅当主体S的完整性级别大于或等于客体O的完整性级别时, 主体S可以写客体O,一般称之为< strong > 上写< / strong > 。< br > < strong > 执行操作控制< / strong > < br > 当且仅当主体S2的完整性级别高于或等于S1,主体S1可以执行主体S2。 < / p >
< / blockquote >
< / li >
< li style = "list-style: none" > < input type = "checkbox" > 关于读操作,有不同的控制策略:< blockquote >
< p > < strong > 低水标模型< / strong > < br > 任意主体可以读任意完整性级别的客体,但是如果主体读完整性级别比自己低的客体时,主体的完整性级别将为客体完整性级别,否则,主体的完整性级别保持不变。< br > < strong > 环模型< / strong > < br > 不管完整性级别如何,任何主体都可以读任何客体< br > < strong > 严格完整性模型< / strong > < br > 这个模型对读操作是根据主客体的完整性级别严格控制的,即只有完整性级别低或相等的主体才可以读完整性级别高的客体,称为< strong > 下读< / strong > < / p >
< / blockquote >
< / li >
< / ul >
< p > < strong > 一般都是指毕巴严格完整性模型,总结来说是上写、下读< / strong > < / p >
< hr >
< h2 id = "四、实验内容:" > < a href = "#四、实验内容:" class = "headerlink" title = "四、实验内容:" > < / a > 四、实验内容:< / h2 > < h3 id = "1-用户登录实现" > < a href = "#1-用户登录实现" class = "headerlink" title = "1. 用户登录实现" > < / a > 1. 用户登录实现< / h3 > < p > < strong > 核对用户输入的账户密码与存储的是否匹配< / strong > < / p >
< p > < img src = "https://github.com/Cool-Y/BIBA-model/blob/master/img/login.PNG" alt = "login" > < / p >
< ul >
< li > 从用户输入框获取账户和密码< / li >
< li > 检查输入信息是否合法(为空)< / li >
< li > 从password.txt中获取, 并保存在列表listFromLine中< / li >
< li > 检查输入的账户是否存在< / li >
< li > 若存在,检查对应的密码是否正确< / li >
< li > < p > 若正确,判断是管理员还是普通用户,并跳转相应的界面< / p >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < span class = "line" > 13< / span > < br > < span class = "line" > 14< / span > < br > < span class = "line" > 15< / span > < br > < span class = "line" > 16< / span > < br > < span class = "line" > 17< / span > < br > < span class = "line" > 18< / span > < br > < span class = "line" > 19< / span > < br > < span class = "line" > 20< / span > < br > < span class = "line" > 21< / span > < br > < span class = "line" > 22< / span > < br > < span class = "line" > 23< / span > < br > < span class = "line" > 24< / span > < br > < span class = "line" > 25< / span > < br > < span class = "line" > 26< / span > < br > < span class = "line" > 27< / span > < br > < span class = "line" > 28< / span > < br > < span class = "line" > 29< / span > < br > < span class = "line" > 30< / span > < br > < span class = "line" > 31< / span > < br > < span class = "line" > 32< / span > < br > < span class = "line" > 33< / span > < br > < span class = "line" > 34< / span > < br > < span class = "line" > 35< / span > < br > < span class = "line" > 36< / span > < br > < span class = "line" > 37< / span > < br > < span class = "line" > 38< / span > < br > < span class = "line" > 39< / span > < br > < span class = "line" > 40< / span > < br > < span class = "line" > 41< / span > < br > < span class = "line" > 42< / span > < br > < span class = "line" > 43< / span > < br > < span class = "line" > 44< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > checkPass< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > nameIn = self.lineEdit.text()< / span > < br > < span class = "line" > passwdIn = self.lineEdit_2.text()< / span > < br > < span class = "line" > md5 = hashlib.md5()< / span > < br > < span class = "line" > md5.update(passwdIn.encode(< span class = "string" > "utf-8"< / span > ))< / span > < br > < span class = "line" > passwdIn = md5.hexdigest()< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > (nameIn == < span class = "string" > ''< / span > ) < span class = "keyword" > or< / span > (passwdIn == < span class = "string" > ''< / span > ):< / span > < br > < span class = "line" > QMessageBox.warning(self,< / span > < br > < span class = "line" > < span class = "string" > "警告"< / span > ,< / span > < br > < span class = "line" > < span class = "string" > "账号和密码不能为空"< / span > ,< / span > < br > < span class = "line" > QMessageBox.Yes)< / span > < br > < span class = "line" > self.lineEdit.setFocus()< / span > < br > < span class = "line" > print(nameIn, passwdIn)< / span > < br > < span class = "line" > fr = open(< span class = "string" > './etc/passwd.txt'< / span > )< / span > < br > < span class = "line" > arrayofLines = fr.readlines()< / span > < br > < span class = "line" > numberofLines = len(arrayofLines)< / span > < br > < span class = "line" > < span class = "keyword" > for< / span > line < span class = "keyword" > in< / span > arrayofLines:< / span > < br > < span class = "line" > line = line.strip()< / span > < br > < span class = "line" > listFromLine = line.split(< span class = "string" > ':'< / span > )< / span > < br > < span class = "line" > name = listFromLine[< span class = "number" > 0< / span > ]< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > name == nameIn:< / span > < br > < span class = "line" > numberofLines = < span class = "number" > -1< / span > < / span > < br > < span class = "line" > passwd = listFromLine[< span class = "number" > 1< / span > ]< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > passwd == passwdIn:< / span > < br > < span class = "line" > group = listFromLine[< span class = "number" > 2< / span > ]< / span > < br > < span class = "line" > print(< span class = "string" > "\n登录成功!\n"< / span > )< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > name == < span class = "string" > 'root'< / span > :< / span > < br > < span class = "line" > print(< span class = "string" > 'root登录'< / span > )< / span > < br > < span class = "line" > rootUI.show()< / span > < br > < span class = "line" >
< / li >
< / ul >
< hr >
< h3 id = "2-管理员功能实现" > < a href = "#2-管理员功能实现" class = "headerlink" title = "2. 管理员功能实现" > < / a > 2. 管理员功能实现< / h3 > < p > < strong > 管理员可以对用户进行增、删、查的操作< / strong > < / p >
< p > < img src = "https://github.com/Cool-Y/BIBA-model/blob/master/img/rootUI.PNG" alt = "login" > < / p >
< h4 id = "增加用户的实现" > < a href = "#增加用户的实现" class = "headerlink" title = "增加用户的实现" > < / a > 增加用户的实现< / h4 > < blockquote >
< ul >
< li > 获取管理员输入的用户名、密码和用户等级< / li >
< li > 将明文密码转换为md5值< / li >
< li > 判断输入的账户是否已经存在以及是否为空< / li >
< li > 如果没有问题, 将其存入passwd.txt的末尾< / li >
< / ul >
< / blockquote >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < span class = "line" > 13< / span > < br > < span class = "line" > 14< / span > < br > < span class = "line" > 15< / span > < br > < span class = "line" > 16< / span > < br > < span class = "line" > 17< / span > < br > < span class = "line" > 18< / span > < br > < span class = "line" > 19< / span > < br > < span class = "line" > 20< / span > < br > < span class = "line" > 21< / span > < br > < span class = "line" > 22< / span > < br > < span class = "line" > 23< / span > < br > < span class = "line" > 24< / span > < br > < span class = "line" > 25< / span > < br > < span class = "line" > 26< / span > < br > < span class = "line" > 27< / span > < br > < span class = "line" > 28< / span > < br > < span class = "line" > 29< / span > < br > < span class = "line" > 30< / span > < br > < span class = "line" > 31< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > adduser< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > print(< span class = "string" > '开始添加'< / span > )< / span > < br > < span class = "line" > name = self.lineEdit_4.text()< / span > < br > < span class = "line" > passwd = self.lineEdit_6.text()< / span > < br > < span class = "line" > md5 = hashlib.md5()< / span > < br > < span class = "line" > md5.update(passwd.encode(< span class = "string" > "utf-8"< / span > ))< / span > < br > < span class = "line" > passwd = md5.hexdigest()< / span > < br > < span class = "line" > group = self.comboBox.currentText()< / span > < br > < span class = "line" > self.name = name< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > self.euxit():< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > name == < span class = "string" > ''< / span > < span class = "keyword" > or< / span > passwd == < span class = "string" > ''< / span > :< / span > < br > < span class = "line" > QMessageBox.warning(self,< / span > < br > < span class = "line" > < span class = "string" > "警告"< / span > ,< / span > < br > < span class = "line" > < span class = "string" > "账号和密码不能为空"< / span > ,< / span > < br > < span class = "line" > QMessageBox.Yes)< / span > < br > < span class = "line" > self.lineEdit.setFocus()< / span > < br > < span class = "line" > < span class = "keyword" > else< / span > :< / span > < br > < span class = "line" > cur_path = os.getcwd()< / span > < br > < span class = "line" > filename = cur_path + < span class = "string" > '/etc/passwd.txt'< / span > < / span > < br > < span class = "line" > fi = open(filename, < span class = "string" > 'r+'< / span > )< / span > < br > < span class = "line" > str = name + < span class = "string" > ':'< / span > + passwd + < span class = "string" > ':'< / span > + group + < span class = "string" > '\n'< / span > < / span > < br > < span class = "line" > print(< span class = "string" > '成功增加用户'< / span > + str + < span class = "string" > '\n'< / span > )< / span > < br > < span class = "line" > fi.seek(< span class = "number" > 0< / span > , < span class = "number" > 2< / span > )< / span > < br > < span class = "line" > fi.write(str)< / span > < br > < span class = "line" > fi.close()< / span > < br > < span class = "line" > < span class = "keyword" > else< / span > :< / span > < br > < span class = "line" > QMessageBox.warning(self,< / span > < br > < span class = "line" > < span class = "string" > "警告"< / span > ,< / span > < br > < span class = "line" > < span class = "string" > "用户已存在"< / span > ,< / span > < br > < span class = "line" > QMessageBox.Yes)< / span > < br > < span class = "line" > self.lineEdit.setFocus()< / span > < br > < / pre > < / td > < / tr > < / table > < / figure >
< h4 id = "查询已有用户的实现" > < a href = "#查询已有用户的实现" class = "headerlink" title = "查询已有用户的实现" > < / a > 查询已有用户的实现< / h4 > < blockquote >
< p > 从passwd.txt中逐行读出< / p >
< / blockquote >
< p > < img src = "https://github.com/Cool-Y/BIBA-model/blob/master/img/existUser.PNG" alt = "login" > < / p >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > readuser< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > print(< span class = "string" > 'readuser'< / span > )< / span > < br > < span class = "line" > cur_path = os.getcwd()< / span > < br > < span class = "line" > filename = cur_path + < span class = "string" > '/etc/passwd.txt'< / span > < / span > < br > < span class = "line" > fo = open(filename)< / span > < br > < span class = "line" > arrayofLines = fo.readlines()< / span > < br > < span class = "line" > names = < span class = "string" > ''< / span > < / span > < br > < span class = "line" > < span class = "keyword" > for< / span > line < span class = "keyword" > in< / span > arrayofLines:< / span > < br > < span class = "line" > line = line.strip()< / span > < br > < span class = "line" > listFromLine = line.split(< span class = "string" > ':'< / span > )< / span > < br > < span class = "line" > names = names + listFromLine[< span class = "number" > 0< / span > ] + < span class = "string" > '\n'< / span > < / span > < br > < span class = "line" > self.textEdit.setPlaceholderText(names)< / span > < br > < / pre > < / td > < / tr > < / table > < / figure >
< h4 id = "删除用户的实现" > < a href = "#删除用户的实现" class = "headerlink" title = "删除用户的实现" > < / a > 删除用户的实现< / h4 > < blockquote >
< p > 从passwd.txt中逐行读出用户名, 并与待删除用户比较, 如果相同, 则删除该行< / p >
< / blockquote >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < span class = "line" > 13< / span > < br > < span class = "line" > 14< / span > < br > < span class = "line" > 15< / span > < br > < span class = "line" > 16< / span > < br > < span class = "line" > 17< / span > < br > < span class = "line" > 18< / span > < br > < span class = "line" > 19< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > rmuser< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > print(< span class = "number" > 1< / span > )< / span > < br > < span class = "line" > cur_path = os.getcwd()< / span > < br > < span class = "line" > filename = cur_path + < span class = "string" > '/etc/passwd.txt'< / span > < / span > < br > < span class = "line" > rmName = self.lineEdit.text()< / span > < br > < span class = "line" > < span class = "keyword" > with< / span > open(filename, < span class = "string" > 'r'< / span > ,encoding=< span class = "string" > "utf-8"< / span > ) < span class = "keyword" > as< / span > r:< / span > < br > < span class = "line" > lines = r.readlines()< / span > < br > < span class = "line" > lenl = len(lines)< / span > < br > < span class = "line" > < span class = "keyword" > with< / span > open(filename, < span class = "string" > 'w'< / span > ,encoding=< span class = "string" > "utf-8"< / span > ) < span class = "keyword" > as< / span > w:< / span > < br > < span class = "line" > < span class = "keyword" > for< / span > line < span class = "keyword" > in< / span > lines:< / span > < br > < span class = "line" > l = line.strip()< / span > < br > < span class = "line" > listFromLine = l.split(< span class = "string" > ':'< / span > )< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > rmName == listFromLine[< span class = "number" > 0< / span > ]:< / span > < br > < span class = "line" > print(< span class = "string" > '删除用户'< / span > + rmName)< / span > < br > < span class = "line" > < span class = "keyword" > continue< / span > < / span > < br > < span class = "line" > < span class = "keyword" > if< / span > line == < span class = "string" > '\n'< / span > :< / span > < br > < span class = "line" > print(< span class = "string" > 'find换行'< / span > )< / span > < br > < span class = "line" > line = < span class = "string" > ''< / span > < / span > < br > < span class = "line" > w.write(line)< / span > < br > < / pre > < / td > < / tr > < / table > < / figure >
< hr >
< h3 id = "3-普通用户功能实现" > < a href = "#3-普通用户功能实现" class = "headerlink" title = "3. 普通用户功能实现" > < / a > 3. 普通用户功能实现< / h3 > < p > < strong > 普通用户可以完成对合法权限文件的读取、增加内容(上写下读)以及创建文件的操作< / strong > < / p >
< p > < img src = "https://github.com/Cool-Y/BIBA-model/blob/master/img/normal.PNG" alt = "login" > < / p >
< h4 id = "读取文件内容" > < a href = "#读取文件内容" class = "headerlink" title = "读取文件内容" > < / a > 读取文件内容< / h4 > < blockquote >
< p > 双击文件名< br > 获取选中文件和当前用户的完整性级别< br > 如果用户的级别低于文件,则读取文件内容< / p >
< / blockquote >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < span class = "line" > 13< / span > < br > < span class = "line" > 14< / span > < br > < span class = "line" > 15< / span > < br > < span class = "line" > 16< / span > < br > < span class = "line" > 17< / span > < br > < span class = "line" > 18< / span > < br > < span class = "line" > 19< / span > < br > < span class = "line" > 20< / span > < br > < span class = "line" > 21< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > readfile< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > dict = self.getGrade()< / span > < br > < span class = "line" > fgrade = str(dict[self.file_path])< / span > < br > < span class = "line" > ugrade = self.lineEdit_2.text()< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > ugrade > = fgrade:< / span > < br > < span class = "line" > print(ugrade+ < span class = "string" > ' 正在读取 '< / span > +fgrade)< / span > < br > < span class = "line" > filename = self.file_path< / span > < br > < span class = "line" > print(filename)< / span > < br > < span class = "line" > fr = open(filename)< / span > < br > < span class = "line" > lines = < span class = "string" > ''< / span > < / span > < br > < span class = "line" > arrayofLines = fr.readlines()< / span > < br > < span class = "line" > < span class = "keyword" > for< / span > line < span class = "keyword" > in< / span > arrayofLines:< / span > < br > < span class = "line" > lines += line< / span > < br > < span class = "line" > self.textEdit.setText(lines)< / span > < br > < span class = "line" > print(< span class = "string" > '读取成功\n'< / span > )< / span > < br > < span class = "line" > < span class = "keyword" > else< / span > :< / span > < br > < span class = "line" > QMessageBox.warning(self,< / span > < br > < span class = "line" > < span class = "string" > "警告"< / span > ,< / span > < br > < span class = "line" > < span class = "string" > "您的用户等级太高"< / span > ,< / span > < br > < span class = "line" > QMessageBox.Yes)< / span > < br > < span class = "line" > self.lineEdit.setFocus()< / span > < br > < / pre > < / td > < / tr > < / table > < / figure >
< h4 id = "增加文件内容" > < a href = "#增加文件内容" class = "headerlink" title = "增加文件内容" > < / a > 增加文件内容< / h4 > < blockquote >
< p > 双击文件名< br > 获取选中文件和当前用户的完整性级别< br > 如果用户的级别高于文件,则写入文件内容< / p >
< / blockquote >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < span class = "line" > 13< / span > < br > < span class = "line" > 14< / span > < br > < span class = "line" > 15< / span > < br > < span class = "line" > 16< / span > < br > < span class = "line" > 17< / span > < br > < span class = "line" > 18< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > writefile< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > dict = self.getGrade()< / span > < br > < span class = "line" > fgrade = dict[self.file_path]< / span > < br > < span class = "line" > ugrade = self.lineEdit_2.text()< / span > < br > < span class = "line" > print(ugrade + < span class = "string" > ' 正在写入 '< / span > + fgrade)< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > ugrade < = fgrade:< / span > < br > < span class = "line" > filename = self.file_path< / span > < br > < span class = "line" > str = self.textEdit.toPlainText()< / span > < br > < span class = "line" > print(str)< / span > < br > < span class = "line" > fo = open(filename, < span class = "string" > 'r+'< / span > )< / span > < br > < span class = "line" > fo.seek(< span class = "number" > 0< / span > , < span class = "number" > 2< / span > )< / span > < br > < span class = "line" > fo.write(str)< / span > < br > < span class = "line" > < span class = "keyword" > else< / span > :< / span > < br > < span class = "line" > QMessageBox.warning(self,< / span > < br > < span class = "line" > < span class = "string" > "警告"< / span > ,< / span > < br > < span class = "line" > < span class = "string" > "您的用户等级太低"< / span > ,< / span > < br > < span class = "line" > QMessageBox.Yes)< / span > < br > < span class = "line" > self.lineEdit.setFocus()< / span > < br > < / pre > < / td > < / tr > < / table > < / figure >
< h4 id = "创建文件" > < a href = "#创建文件" class = "headerlink" title = "创建文件" > < / a > 创建文件< / h4 > < blockquote >
< p > 获取当前用户名和输入的文件名< br > 在当前路径下创建名为用户名的文件< br > 并对新创建的文件与用户等级建立字典, 新文件路径为key, 用户等级为value< br > 这个字典方便读写时判断等级高低< / p >
< / blockquote >
< figure class = "highlight python" > < table > < tr > < td class = "gutter" > < pre > < span class = "line" > 1< / span > < br > < span class = "line" > 2< / span > < br > < span class = "line" > 3< / span > < br > < span class = "line" > 4< / span > < br > < span class = "line" > 5< / span > < br > < span class = "line" > 6< / span > < br > < span class = "line" > 7< / span > < br > < span class = "line" > 8< / span > < br > < span class = "line" > 9< / span > < br > < span class = "line" > 10< / span > < br > < span class = "line" > 11< / span > < br > < span class = "line" > 12< / span > < br > < span class = "line" > 13< / span > < br > < span class = "line" > 14< / span > < br > < span class = "line" > 15< / span > < br > < span class = "line" > 16< / span > < br > < span class = "line" > 17< / span > < br > < span class = "line" > 18< / span > < br > < span class = "line" > 19< / span > < br > < span class = "line" > 20< / span > < br > < span class = "line" > 21< / span > < br > < span class = "line" > 22< / span > < br > < span class = "line" > 23< / span > < br > < span class = "line" > 24< / span > < br > < / pre > < / td > < td class = "code" > < pre > < span class = "line" > < span class = "function" > < span class = "keyword" > def< / span > < span class = "title" > touchfile< / span > < span class = "params" > (self)< / span > :< / span > < / span > < br > < span class = "line" > urName = self.lineEdit.text()< / span > < br > < span class = "line" > filename = self.lineEdit_4.text()< / span > < br > < span class = "line" > cur_path = os.getcwd()< / span > < br > < span class = "line" > new_path = os.path.join(cur_path + < span class = "string" > '/file'< / span > , urName)< / span > < br > < span class = "line" > print(urName)< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > os.path.exists(new_path) == < span class = "literal" > False< / span > :< / span > < br > < span class = "line" > os.mkdir(new_path)< / span > < br > < span class = "line" > os.chdir(new_path)< / span > < br > < span class = "line" > fr = open(filename, < span class = "string" > 'w'< / span > )< / span > < br > < span class = "line" > key = (new_path + < span class = "string" > '/'< / span > + filename).replace(< span class = "string" > '\\'< / span > , < span class = "string" > '/'< / span > )< / span > < br > < span class = "line" > fr.close()< / span > < br > < span class = "line" > os.chdir(cur_path)< / span > < br > < span class = "line" > fa = open(< span class = "string" > './etc/ac.txt'< / span > , < span class = "string" > 'r'< / span > )< / span > < br > < span class = "line" > a = fa.read()< / span > < br > < span class = "line" > < span class = "keyword" > if< / span > a == < span class = "string" > ''< / span > :< / span > < br > < span class = "line" > dict = { } < / span > < br > < span class = "line" > < span class = "keyword" > else< / span > :< / span > < br > < span class = "line" > dict = eval(a)< / span > < br > < span class = "line" > dict[key] = self.lineEdit_2.text()< / span > < br > < span class = "line" > fr = open(< span class = "string" > './etc/ac.txt'< / span > , < span class = "string" > 'w'< / span > )< / span > < br > < span class = "line" > fr.write(str(dict))< / span > < br > < span class = "line" > fr.close()< / span > < br > < span class = "line" > fa.close()< / span > < br > < / pre > < / td > < / tr > < / table > < / figure >
< hr >
< h2 id = "五、心得体会:" > < a href = "#五、心得体会:" class = "headerlink" title = "五、心得体会:" > < / a > 五、心得体会:< / h2 > < h2 id = "六、改进部分:" > < a href = "#六、改进部分:" class = "headerlink" title = "六、改进部分:" > < / a > 六、改进部分:< / h2 >
< / div >
2019-03-22 12:33:24 +00:00
< div >
< div style = "padding: 10px 0; margin: 20px auto; width: 90%; text-align: center;" >
< div > 您的支持将鼓励我继续创作!< / div >
< button id = "rewardButton" disable = "enable" onclick = "var qr = document.getElementById('QR'); if (qr.style.display === 'none') {qr.style.display='block';} else {qr.style.display='none'}" >
< span > 打赏< / span >
< / button >
< div id = "QR" style = "display: none;" >
< div id = "wechat" style = "display: inline-block" >
< img id = "wechat_qr" src = "/images/wechatpay.png" alt = "Cool-Y 微信支付" >
< p > 微信支付< / p >
< / div >
< div id = "alipay" style = "display: inline-block" >
< img id = "alipay_qr" src = "/images/alipay.png" alt = "Cool-Y 支付宝" >
< p > 支付宝< / p >
< / div >
< / div >
< / div >
< / div >
2019-03-22 11:03:55 +00:00
< footer class = "post-footer" >
< div class = "post-tags" >
< a href = "/tags/模型实现/" rel = "tag" > # 模型实现< / a >
< a href = "/tags/python/" rel = "tag" > # python< / a >
< a href = "/tags/访问控制/" rel = "tag" > # 访问控制< / a >
< / div >
< div class = "post-nav" >
< div class = "post-nav-next post-nav-item" >
< a href = "/2000/01/01/hello-world/" rel = "next" title = "Hello World" >
< i class = "fa fa-chevron-left" > < / i > Hello World
< / a >
< / div >
< span class = "post-nav-divider" > < / span >
< div class = "post-nav-prev post-nav-item" >
< a href = "/2019/01/16/wifi半双工侧信道攻击学习笔记/" rel = "prev" title = "wifi半双工侧信道攻击学习笔记" >
wifi半双工侧信道攻击学习笔记 < i class = "fa fa-chevron-right" > < / i >
< / a >
< / div >
< / div >
< / footer >
< / div >
< / article >
< div class = "post-spread" >
< / div >
< / div >
< / div >
< div class = "comments" id = "comments" >
< div id = "gitment-container" > < / div >
< / div >
< / div >
< div class = "sidebar-toggle" >
< div class = "sidebar-toggle-line-wrap" >
< span class = "sidebar-toggle-line sidebar-toggle-line-first" > < / span >
< span class = "sidebar-toggle-line sidebar-toggle-line-middle" > < / span >
< span class = "sidebar-toggle-line sidebar-toggle-line-last" > < / span >
< / div >
< / div >
< aside id = "sidebar" class = "sidebar" >
< div class = "sidebar-inner" >
< ul class = "sidebar-nav motion-element" >
< li class = "sidebar-nav-toc sidebar-nav-active" data-target = "post-toc-wrap" >
文章目录
< / li >
< li class = "sidebar-nav-overview" data-target = "site-overview-wrap" >
站点概览
< / li >
< / ul >
< section class = "site-overview-wrap sidebar-panel" >
< div class = "site-overview" >
< div class = "site-author motion-element" itemprop = "author" itemscope itemtype = "http://schema.org/Person" >
< p class = "site-author-name" itemprop = "name" > Cool-Y< / p >
< p class = "site-description motion-element" itemprop = "description" > < / p >
< / div >
< nav class = "site-state motion-element" >
< div class = "site-state-item site-state-posts" >
< a href = "/archives/" >
< span class = "site-state-item-count" > 5< / span >
< span class = "site-state-item-name" > 日志< / span >
< / a >
< / div >
< div class = "site-state-item site-state-categories" >
< a href = "/categories/index.html" >
< span class = "site-state-item-count" > 4< / span >
< span class = "site-state-item-name" > 分类< / span >
< / a >
< / div >
< div class = "site-state-item site-state-tags" >
< a href = "/tags/index.html" >
< span class = "site-state-item-count" > 11< / span >
< span class = "site-state-item-name" > 标签< / span >
< / a >
< / div >
< / nav >
< / div >
< / section >
<!-- noindex -->
< section class = "post-toc-wrap motion-element sidebar-panel sidebar-panel-active" >
< div class = "post-toc" >
< div class = "post-toc-content" > < ol class = "nav" > < li class = "nav-item nav-level-1" > < a class = "nav-link" href = "#基于python语言的BIBA模型图形界面实现" > < span class = "nav-number" > 1.< / span > < span class = "nav-text" > 基于python语言的BIBA模型图形界面实现< / span > < / a > < ol class = "nav-child" > < li class = "nav-item nav-level-2" > < a class = "nav-link" href = "#一、实验目的:" > < span class = "nav-number" > 1.1.< / span > < span class = "nav-text" > 一、实验目的:< / span > < / a > < / li > < li class = "nav-item nav-level-2" > < a class = "nav-link" href = "#二、实验环境:" > < span class = "nav-number" > 1.2.< / span > < span class = "nav-text" > 二、实验环境:< / span > < / a > < / li > < li class = "nav-item nav-level-2" > < a class = "nav-link" href = "#三、实验原理:" > < span class = "nav-number" > 1.3.< / span > < span class = "nav-text" > 三、实验原理:< / span > < / a > < ol class = "nav-child" > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#1-什么是安全模型" > < span class = "nav-number" > 1.3.0.1.< / span > < span class = "nav-text" > 1. 什么是安全模型< / span > < / a > < / li > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#2-biba完整性模型: " > < span class = "nav-number" > 1.3.0.2.< / span > < span class = "nav-text" > 2. biba完整性模型: < / span > < / a > < / li > < / ol > < / li > < / ol > < / li > < li class = "nav-item nav-level-2" > < a class = "nav-link" href = "#四、实验内容:" > < span class = "nav-number" > 1.4.< / span > < span class = "nav-text" > 四、实验内容:< / span > < / a > < ol class = "nav-child" > < li class = "nav-item nav-level-3" > < a class = "nav-link" href = "#1-用户登录实现" > < span class = "nav-number" > 1.4.1.< / span > < span class = "nav-text" > 1. 用户登录实现< / span > < / a > < / li > < li class = "nav-item nav-level-3" > < a class = "nav-link" href = "#2-管理员功能实现" > < span class = "nav-number" > 1.4.2.< / span > < span class = "nav-text" > 2. 管理员功能实现< / span > < / a > < ol class = "nav-child" > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#增加用户的实现" > < span class = "nav-number" > 1.4.2.1.< / span > < span class = "nav-text" > 增加用户的实现< / span > < / a > < / li > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#查询已有用户的实现" > < span class = "nav-number" > 1.4.2.2.< / span > < span class = "nav-text" > 查询已有用户的实现< / span > < / a > < / li > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#删除用户的实现" > < span class = "nav-number" > 1.4.2.3.< / span > < span class = "nav-text" > 删除用户的实现< / span > < / a > < / li > < / ol > < / li > < li class = "nav-item nav-level-3" > < a class = "nav-link" href = "#3-普通用户功能实现" > < span class = "nav-number" > 1.4.3.< / span > < span class = "nav-text" > 3. 普通用户功能实现< / span > < / a > < ol class = "nav-child" > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#读取文件内容" > < span class = "nav-number" > 1.4.3.1.< / span > < span class = "nav-text" > 读取文件内容< / span > < / a > < / li > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#增加文件内容" > < span class = "nav-number" > 1.4.3.2.< / span > < span class = "nav-text" > 增加文件内容< / span > < / a > < / li > < li class = "nav-item nav-level-4" > < a class = "nav-link" href = "#创建文件" > < span class = "nav-number" > 1.4.3.3.< / span > < span class = "nav-text" > 创建文件< / span > < / a > < / li > < / ol > < / li > < / ol > < / li > < li class = "nav-item nav-level-2" > < a class = "nav-link" href = "#五、心得体会:" > < span class = "nav-number" > 1.5.< / span > < span class = "nav-text" > 五、心得体会:< / span > < / a > < / li > < li class = "nav-item nav-level-2" > < a class = "nav-link" href = "#六、改进部分:" > < span class = "nav-number" > 1.6.< / span > < span class = "nav-text" > 六、改进部分:< / span > < / a > < / li > < / ol > < / div >
< / div >
< / section >
<!-- /noindex -->
< / div >
< / aside >
< / div >
< / main >
< footer id = "footer" class = "footer" >
< div class = "footer-inner" >
< div class = "copyright" > © < span itemprop = "copyrightYear" > 2019< / span >
< span class = "with-love" >
< i class = "fa fa-user" > < / i >
< / span >
< span class = "author" itemprop = "copyrightHolder" > Cool-Y< / span >
< / div >
< div class = "powered-by" > 由 < a class = "theme-link" target = "_blank" href = "https://hexo.io" > Hexo< / a > 强力驱动< / div >
< span class = "post-meta-divider" > |< / span >
< div class = "theme-info" > 主题 — < a class = "theme-link" target = "_blank" href = "https://github.com/iissnan/hexo-theme-next" > NexT.Muse< / a > v5.1.4< / div >
< / div >
< / footer >
< div class = "back-to-top" >
< i class = "fa fa-arrow-up" > < / i >
< / div >
< / div >
< script type = "text/javascript" >
if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
window.Promise = null;
}
< / script >
< script type = "text/javascript" src = "/lib/jquery/index.js?v=2.1.3" > < / script >
< script type = "text/javascript" src = "/lib/fastclick/lib/fastclick.min.js?v=1.0.6" > < / script >
< script type = "text/javascript" src = "/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7" > < / script >
< script type = "text/javascript" src = "/lib/velocity/velocity.min.js?v=1.2.1" > < / script >
< script type = "text/javascript" src = "/lib/velocity/velocity.ui.min.js?v=1.2.1" > < / script >
< script type = "text/javascript" src = "/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5" > < / script >
< script type = "text/javascript" src = "/js/src/utils.js?v=5.1.4" > < / script >
< script type = "text/javascript" src = "/js/src/motion.js?v=5.1.4" > < / script >
< script type = "text/javascript" src = "/js/src/scrollspy.js?v=5.1.4" > < / script >
< script type = "text/javascript" src = "/js/src/post-details.js?v=5.1.4" > < / script >
< script type = "text/javascript" src = "/js/src/bootstrap.js?v=5.1.4" > < / script >
<!-- LOCAL: You can save these files to your site and update links -->
< link rel = "stylesheet" href = "https://aimingoo.github.io/gitmint/style/default.css" >
< script src = "https://aimingoo.github.io/gitmint/dist/gitmint.browser.js" > < / script >
<!-- END LOCAL -->
< script type = "text/javascript" >
function renderGitment(){
var gitment = new Gitmint({
id: window.location.pathname,
owner: 'Cool-Y',
repo: 'gitment-comments',
lang: "" || navigator.language || navigator.systemLanguage || navigator.userLanguage,
oauth: {
client_secret: '1c5db4da72df5e6fc318d12afe5f4406f7c54343',
client_id: '180955a2c3ae3d966d9a'
}});
gitment.render('gitment-container');
}
renderGitment();
< / script >
< script src = "https://cdn1.lncld.net/static/js/av-core-mini-0.6.4.js" > < / script >
< script > AV . initialize ( "EWwoJgHNdlj6iBjiFlMcabUO-gzGzoHsz" , "x8FxDrYG79C8YFrTww9ljo8K" ) ; < / script >
< script >
function showTime(Counter) {
var query = new AV.Query(Counter);
var entries = [];
var $visitors = $(".leancloud_visitors");
$visitors.each(function () {
entries.push( $(this).attr("id").trim() );
});
query.containedIn('url', entries);
query.find()
.done(function (results) {
var COUNT_CONTAINER_REF = '.leancloud-visitors-count';
if (results.length === 0) {
$visitors.find(COUNT_CONTAINER_REF).text(0);
return;
}
for (var i = 0; i < results.length ; i + + ) {
var item = results[i];
var url = item.get('url');
var time = item.get('time');
var element = document.getElementById(url);
$(element).find(COUNT_CONTAINER_REF).text(time);
}
for(var i = 0; i < entries.length ; i + + ) {
var url = entries[i];
var element = document.getElementById(url);
var countSpan = $(element).find(COUNT_CONTAINER_REF);
if( countSpan.text() == '') {
countSpan.text(0);
}
}
})
.fail(function (object, error) {
console.log("Error: " + error.code + " " + error.message);
});
}
function addCount(Counter) {
var $visitors = $(".leancloud_visitors");
var url = $visitors.attr('id').trim();
var title = $visitors.attr('data-flag-title').trim();
var query = new AV.Query(Counter);
query.equalTo("url", url);
query.find({
success: function(results) {
if (results.length > 0) {
var counter = results[0];
counter.fetchWhenSave(true);
counter.increment("time");
counter.save(null, {
success: function(counter) {
var $element = $(document.getElementById(url));
$element.find('.leancloud-visitors-count').text(counter.get('time'));
},
error: function(counter, error) {
console.log('Failed to save Visitor num, with error message: ' + error.message);
}
});
} else {
var newcounter = new Counter();
/* Set ACL */
var acl = new AV.ACL();
acl.setPublicReadAccess(true);
acl.setPublicWriteAccess(true);
newcounter.setACL(acl);
/* End Set ACL */
newcounter.set("title", title);
newcounter.set("url", url);
newcounter.set("time", 1);
newcounter.save(null, {
success: function(newcounter) {
var $element = $(document.getElementById(url));
$element.find('.leancloud-visitors-count').text(newcounter.get('time'));
},
error: function(newcounter, error) {
console.log('Failed to create');
}
});
}
},
error: function(error) {
console.log('Error:' + error.code + " " + error.message);
}
});
}
$(function() {
var Counter = AV.Object.extend("Counter");
if ($('.leancloud_visitors').length == 1) {
addCount(Counter);
} else if ($('.post-title-link').length > 1) {
showTime(Counter);
}
});
< / script >
< / body >
< / html >