Skip to content

Commit

Permalink
fix bug of permission
Browse files Browse the repository at this point in the history
  • Loading branch information
3xxx committed May 1, 2018
1 parent ed63221 commit e5a881c
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 30 deletions.
2 changes: 2 additions & 0 deletions History.txt
@@ -1,4 +1,6 @@
EngineerCMS revision history
7, EngineerCMS 1.01 (Apr 30, 2018)
*) Fixed bug of onlyoffice permission
6, EngineerCMS 1.01 (Apr 25, 2018)
+) Add project permission query&update
5, EngineerCMS 1.01 (Feb 20, 2018)
Expand Down
37 changes: 32 additions & 5 deletions controllers/onlyoffice.go
Expand Up @@ -210,6 +210,7 @@ func (c *OnlyController) Get() {
beego.Info("电脑端!")
c.TplName = "onlyoffice/docs.tpl"
}
// c.Data["Url"] = c.Ctx.Request.URL.String()
// var u = navigator.userAgent, app = navigator.appVersion;
// return {
// trident: u.indexOf('Trident') > -1, //IE内核
Expand Down Expand Up @@ -328,7 +329,7 @@ func (c *OnlyController) GetData() {
if useridstring != "" { //如果是登录用户,则设置了权限的文档不能看
// beego.Info(myRes)
// myRes1 := e.GetPermissionsForUser("") //取出所有设置了权限的数据
if w.Uid != user.Id {
if w.Uid != user.Id { //如果不是作者本人
for _, k := range myResall { //所有设置了权限的都不能看
// beego.Info(k)
if strconv.FormatInt(v.Id, 10) == path.Base(k[1]) {
Expand All @@ -343,8 +344,8 @@ func (c *OnlyController) GetData() {
}
}
roles := e.GetRolesForUser(useridstring) //取出用户的所有角色
for _, w := range roles {
roleRes = e.GetPermissionsForUser(w) //取出角色的所有权限
for _, w1 := range roles { //2018.4.30修改这个bug,这里原先w改为w1
roleRes = e.GetPermissionsForUser(w1) //取出角色的所有权限,改为w1
for _, k := range roleRes {
// beego.Info(k)
if strconv.FormatInt(v.Id, 10) == path.Base(k[1]) {
Expand Down Expand Up @@ -439,6 +440,8 @@ func (c *OnlyController) GetData() {
// }

//协作页面的显示
//补充权限判断
//补充token
func (c *OnlyController) OnlyOffice() {
id := c.Ctx.Input.Param(":id")
//pid转成64为
Expand All @@ -459,7 +462,7 @@ func (c *OnlyController) OnlyOffice() {
}

var uname, useridstring, Permission string
var myRes [][]string
var myRes, roleRes [][]string
v := c.GetSession("uname")
// var role, userrole int
myResall := e.GetPermissionsForUser("") //取出所有设置了权限的数据
Expand All @@ -486,6 +489,28 @@ func (c *OnlyController) OnlyOffice() {
Permission = k[2]
}
}

roles := e.GetRolesForUser(useridstring) //取出用户的所有角色
for _, w1 := range roles { //2018.4.30修改这个bug,这里原先w改为w1
roleRes = e.GetPermissionsForUser(w1) //取出角色的所有权限,改为w1
for _, k := range roleRes {
// beego.Info(k)
if id == path.Base(k[1]) {
// docxarr[0].Permission = k[2]
int1, err := strconv.Atoi(k[2])
if err != nil {
beego.Error(err)
}
int2, err := strconv.Atoi(Permission)
if err != nil {
beego.Error(err)
}
if int1 < int2 {
Permission = k[2] //按最小值权限
}
}
}
}
}
c.Data["Uid"] = user.Id
// userrole = user.Role
Expand Down Expand Up @@ -524,7 +549,7 @@ func (c *OnlyController) OnlyOffice() {
// }
// }
// }

// beego.Info(Permission)
// In case edit is set to "false" and review is set to "true",
// the document will be available in review mode only.
if Permission == "1" {
Expand All @@ -540,6 +565,8 @@ func (c *OnlyController) OnlyOffice() {
c.Data["Edit"] = false
c.Data["Review"] = false
} else if Permission == "4" {
route := c.Ctx.Request.URL.String()
c.Redirect("/roleerr?url="+route, 302)
return
}

Expand Down
59 changes: 34 additions & 25 deletions quickstart快速开始.txt
Expand Up @@ -8,37 +8,46 @@
5. 进入admin后台页面:http://127.0.0.1/admin;系统已经将127.0.0.1这个本机ip权限设置为1级,进入admin后台页面。admin页面只允许ip权限,不允许登录权限。
6. admin页——分级目录:设置项目目录结构,按系统自带的例子理解。
7. admin页——组织结构:设置部门(分院),下级是科室(专业组),也可以无下级。
8. admin页——用户:可以按规定格式批量导入,也可以逐一添加。用户可以没有科室属性。端口号是这个用户运行cms系统的服务端口号。这里的权限是登录权限,1级权限建议只给自己用,可以向项目里添加成果,不能建立和删除项目;不能进入后台。2级可以下载任意成果附件。3级只能下载pdf格式附件。其他权限只能看。
9. admin页——IP地址段:因为本系统适合于有固定ip地址的局域网内使用,所以这里填写自己机器的真实ip,权限设为1。这个1级权限只能给自己,可以建立项目和进入后台。IP权限为2级的,可以下载任意成果附件,3级的只能下载pdf格式附件,其余权限只能看。
10.admin页——编辑目录:对已经建立的项目目录进行编辑,包括增加选中目录的子目录、删除选中的目录以及修改选中的目录。
11.admin页——同步IP:多人建立相同项目及目录,在这里向这个项目中填入他们的ip和端口号,就可以在自己cms中,这个项目的任何目录下同步他们的成果列表过来。
12.admin页——基本设置——首页轮播图片:点击首页轮播图片(4:1)行,下方出现图片列表,向这个列表中添加宽幅图片即可在首页轮播了,系统采用最新的10张图片在首页轮播。
以下没开发完成:
13.admin页——搜索IP:首页全局检索用到的ip。
14.admin页——权限管理:
15.admin页——用户组:
16.admin页——项目权限:每个项目的分级目录权限设置。
17.admin页——快捷编辑,这个和编辑目录一致,只是验证ztree的演示。
8. admin页——用户-角色:(1)可以按规定格式批量导入;也可以逐一添加。用户可以没有科室属性。端口号是这个用户运行cms系统的服务端口号(这个可以暂时不理)。这里的权限是登录权限,1级权限可以建立项目、进入后台。
(2)点击用户,下方出现角色表,添加角色表(类似用户组)。然后给用户赋予角色,勾选角色——保存。
9.admin页——编辑目录:对已经建立的项目目录进行编辑,包括增加选中目录的子目录、删除选中的目录以及修改选中的目录。
10.admin页——同步IP:多人建立相同项目及目录,在这里向这个项目中填入他们的ip和端口号,就可以在自己cms中,这个项目的任何目录下同步他们的成果列表过来。
11.admin页——基本设置——首页轮播图片:点击首页轮播图片(4:1)行,下方出现图片列表,向这个列表中添加宽幅图片即可在首页轮播了,系统采用最新的10张图片在首页轮播。(其他功能未完成)
12.admin页——角色—用户:通过点击角色,出现所有用户,选择添加删除用户。(该功能未提供)
13.admin页——角色—权限:点击勾选角色;点击勾选权限;点击项目,出现项目目录,勾选赋予权限的目录,保存。

14.admin页——快捷编辑,这个和编辑目录一致,只是验证ztree的演示。
15. admin页——用户-组织结构:(该功能未提供)选择组织结构,出现用户,添加和删除这个组织里的用户。
16. admin页——IP地址段:(IP权限目前没有启用)。因为本系统适合于有固定ip地址的局域网内使用,所以这里填写自己机器的真实ip,权限设为1。这个1级权限只能给自己,可以建立项目和进入后台。IP权限为2级的,可以下载任意成果附件,3级的只能下载pdf格式附件,其余权限只能看。
17.admin页——搜索IP:(该能未提供)首页全局检索用到的ip。
18.admin页——用户—权限:(该功能未提供)点击勾选用户;点击勾选权限;点击项目,出现项目目录,勾选赋予权限的目录,保存。
*************前台使用***********************
18.项目——项目列表页——添加:分级目录就是后台admin页上文第6点定义的。新建项目除了建立数据表中的目录,还在cms系统文件夹attachment中建立目录文件夹,以后所有上传的成果附件都放在这些文件夹中。
19.项目——项目列表页——编辑、删除:删除会连带文件夹一起删除,所以提示了3次。
20.项目——具体一个项目——成果列表——添加:系统设计上按照 成果—附件来保存文件,成果里可以放pdf格式的附件,可以放dwg、dgn、word、excel、jpg等格式的附件,可以放文章,这些附件的名称和成果的编号+成果的名称是否一直取决于下面的添加方式。添加按钮鼠标放上有提示,3个添加按钮分别用于批量上传、多附件模式和添加文章。批量上传就是不用填写成果编号和成果名称,系统自动根据附件文件名截取编号和名称作为成果编号和成果名称,但上传的附件文件名必须按编号+名称命名;多附件模式指一个成果中包含多个附件,比如一张图有参照图,一份报告有多个章节等;文章模式可以将图文word直接粘贴进来,然后按提示导入word中的图片,非常快捷了。也可以批量上传设代现场照片……
21.项目——具体一个项目——成果列表——编辑:一个编辑是修改成果编号和名称等,另一个编辑是编辑成果附件,可以删除和追加附件。文章的编辑需要点击进入文章中,然后编辑或者删除文章,文章删除后成果还在。
21.项目——具体一个项目——成果列表——同步:这里对应后台admin页面上文11条,确保他们已经运行cms,并且相应的项目目录中有成果。同步后,他们的成果会追加到这这个成果表中。重复的成果暂时没处理,一般也不影响。
22.首页——侧栏:这里对应admin页上文第8条,用户的ip和cms服务端口号,点击人名,就可以进入他们的cms。
23.首页——检索:暂时只能检索本人cms中的成果。todo:深度搜索和全局搜索,比如搜索附件、文章全文等。全局是对应admin页上文第13条,设置了需要全局检索的别人的cms和端口号,就可以检索到他们cms中成果、附件和文章了。
19.项目——项目列表页——添加:分级目录就是后台admin页上文第6点定义的。新建项目除了建立数据表中的目录,还在cms系统文件夹attachment中建立目录文件夹,以后所有上传的成果附件都放在这些文件夹中。
20.项目——项目列表页——编辑、删除:删除会连带文件夹一起删除,所以提示了3次。
21.项目——具体一个项目——成果列表——添加:系统设计上按照 成果—附件来保存文件,成果里可以放pdf格式的附件,可以放dwg、dgn、word、excel、jpg等格式的附件,可以放文章,这些附件的名称和成果的编号+成果的名称是否一至取决于下面的添加方式。添加按钮鼠标放上有提示,3个添加按钮分别用于批量上传、多附件模式和添加文章。批量上传就是不用填写成果编号和成果名称,系统自动根据附件文件名截取编号和名称作为成果编号和成果名称,但上传的附件文件名必须按编号+名称命名;多附件模式指一个成果中包含多个附件,比如一张图有参照图,一份报告有多个章节等;文章模式可以将图文word直接粘贴进来,然后按提示导入word中的图片,非常快捷了。也可以批量上传设代现场照片……
22.项目——具体一个项目——成果列表——编辑:第一个编辑是修改成果编号和名称等,另一个编辑是编辑成果附件,可以删除和追加附件。文章的编辑需要点击进入文章中,然后编辑或者删除文章,文章删除后成果还在。
23.项目——具体一个项目——成果列表——同步:这里对应后台admin页面上文11条,确保他们已经运行cms,并且相应的项目目录中有成果。同步后,他们的成果会追加到这这个成果表中。重复的成果暂时没处理,一般也不影响。
24.项目——大事记——日历:每个项目提供一个日历日程,添加事件后,可以勾选作为大事记,则可以看到大事记时间轴。
25.首页——侧栏:这里对应admin页上文第8条,用户的ip和cms服务端口号,点击人名,就可以进入他们的cms。
26.首页——检索:暂时只能检索本人cms中的成果。todo:深度搜索和全局搜索,比如搜索附件、文章全文等。全局是对应admin页上文第13条,设置了需要全局检索的别人的cms和端口号,就可以检索到他们cms中成果、附件和文章了。
27.wiki:一些问题讨论。
28.项目进度展示:这个暂时只是简单的甘特图展示。
29.ONLYOFFICE文档协作:上传指定的文档格式文件。这个页面的权限是独立于项目的,所以要在本页面上设置权限,选择用户、角色,赋予对文档的各种权限。用户和角色需要到后台添加和编辑。
*************用户注册、登录、退出、权限和日历***********
24.新用户只能是管理员添加或导入,不提供注册功能。没有提供专门的登录导航按钮,一般当你权限不够的时候会打开登录页面。也没有退出导航按钮,因为不需要退出,几个小时候后会自动退出。
25.权限:本系统提供2中权限,即IP权限和登录权限,取二者权限高者,IP权限是自动判断的,根据访问者的局域网IP,对比后台admin页上文第9条中设置的ip地址段,如果在那个ip地址段中,就得到对应的权限。如果访问某个附件权限不够,则会转到登录,用户登录后有个权限,在后台admin页上文第8条设置的用户权限。用户登录后用/user地址修改自己的密码。
26.日历:管理员进入后台admin页首先出现的是日历日程,点击就可以添加日程安排,可以拖动,拉伸,右上角分别有月视图、周视图和日视图,默认是月视图,这个视图中拉伸的时间按整数天计,日视图中拉伸的时间段按0.5小时计……。添加日程有全天和公开选项,公开的日程,任何人访问这个cms都可以在导航条右端进入查看,私有的日程只能1级权限的自己看。
30.新用户只能是管理员添加或导入,暂时不提供注册功能。
31.权限:本系统提供3种权限,即1级管理员权限,IP权限和用户-角色权限,目前IP权限暂未开放,理念是根据访问者的局域网IP,对比后台admin页上文第9条中设置的ip地址段,如果在那个ip地址段中,就得到对应的权限。
用户登录后用/user地址修改自己的密码。
32.日历:管理员进入后台admin页首先出现的是日历日程,点击就可以添加日程安排,可以拖动,拉伸,右上角分别有月视图、周视图和日视图,默认是月视图,这个视图中拉伸的时间按整数天计,日视图中拉伸的时间段按0.5小时计……。添加日程有全天和公开选项,公开的日程,任何人访问这个cms都可以在导航条右端进入查看,私有的日程只能1级权限的自己看。

*************升级注意***********************
如果是升级,请:
备份自己修改的文件,然后解压覆盖其他文件。
默认不会覆盖app.conf以及数据文件engineercms.db。
*************其他注意***********************
27.添加项目没有做项目编号重复的判断,原因是一个人一辈子所做的的项目不会太多,不至于建立几个相同编号的项目。而成果添加则进行了重复编号的判断,如果重号,则用新的附件覆盖掉旧的。
28.cms用于个人项目管理,建议不要在建立项目的时候选择过多的目录,比如,你是水工专业的,就建立一个综合和水工的目录,不要将机电的也建立起来,会影响速度。级别也尽量不要每个目录都用到5级,一般用到4级。经过测试,建立一个完整目录的项目(6x9x8x10=4320条目录),时间是半个多小时,主要是因为逐条写入数据库速度较慢,打开一个目录齐全的项目约需要10s,其中服务端构造树状数据需要5s,前端显示等约4s。
29.一般编辑和删除都不允许多选,但翻页后可多选,这是table的bug,多选后无法取消,则点击表格右上角的刷新按钮即可取消选择了。
30.不提供批量打包下载和批量删除。上文第8、9条权限,详细见document中的excel文件,思想就是重要的操作只能是在cms运行的机器上操作,不允许远程登录操作,为了稍微安全一些,比如新建和删除项目,登录后台操作。而添加和删除成果都只能是1级权限即管理员自己才可以,这也是为了安全。因为cms就是个自己用的,别人只需要看和下载。
33.添加项目没有做项目编号重复的判断,原因是一个人一辈子所做的的项目不会太多,不至于建立几个相同编号的项目。而成果添加则进行了重复编号的判断,如果重号,则用新的附件覆盖掉旧的。
34.cms用于个人项目管理,建议不要在建立项目的时候选择过多的目录,比如,你是水工专业的,就建立一个综合和水工的目录,不要将机电的也建立起来。级别也尽量不要每个目录都用到5级,一般用到4级。
35.一般编辑和删除都不允许多选,但翻页后可多选,这是table的bug,要取消翻页的多选,则点击表格右上角的刷新按钮即可取消选择了。
36.不提供批量打包下载和批量删除。
31.上文关于权限的,完整的权限就是admin页面中的“用户-角色-权限”。


0 comments on commit e5a881c

Please sign in to comment.