前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ONLYOFFICE权限开发之二

ONLYOFFICE权限开发之二

作者头像
hotqin888
发布2018-09-11 15:24:06
5650
发布2018-09-11 15:24:06
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334565

登录用户,对于已经进行了权限设置的文档,将根据权限数据库,比对用户名,当与用户有关时,就显示相对应的权限,当都与登录用户无关时,则显示拒绝访问;

对于未登录用户,已经设置了权限的文档,都将显示拒绝访问;

对于登录和未登录用户,未进行权限设置的文档,则显示全部允许。

如果是用户自己上传的,则全部允许。

下图登陆用户和未登陆用户箭头指反了。

权限用casbin进行。

代码语言:javascript
复制
//提供给列表页的table中json数据
func (c *OnlyController) GetData() {
	//1.取得客户端用户名
	var uname, useridstring string
	v := c.GetSession("uname")
	if v != nil {
		uname = v.(string)
		user, err := models.GetUserByUsername(uname)
		if err != nil {
			beego.Error(err)
		}
		c.Data["Uid"] = user.Id
		useridstring = strconv.FormatInt(user.Id, 10)
	}
	var myRes [][]string
	if useridstring != "" {
		myRes = e.GetPermissionsForUser(useridstring)
	}
	myResall := e.GetPermissionsForUser("") //取出所有设置了权限的数据
	var err error
	docs, err := models.GetDocs()
	if err != nil {
		beego.Error(err)
	}
	link := make([]OnlyLink, 0)
	Docxslice := make([]DocxLink, 0)
	for _, w := range docs {
		Attachments, err := models.GetOnlyAttachments(w.Id)
		if err != nil {
			beego.Error(err)
		}
		linkarr := make([]OnlyLink, 1)
		linkarr[0].Id = w.Id
		linkarr[0].Code = w.Code
		linkarr[0].Title = w.Title
		linkarr[0].Label = w.Label
		linkarr[0].End = w.End
		linkarr[0].Principal = w.Principal
		linkarr[0].Uid = w.Uid
		linkarr[0].Created = w.Created
		linkarr[0].Updated = w.Updated
		for _, v := range Attachments {
			docxarr := make([]DocxLink, 1)
			docxarr[0].Permission = "1"
			//查询v.Id是否和myres的V1路径后面的id一致,如果一致,则取得V2(权限)
			//查询用户具有的权限
			if useridstring != "" { //如果是登录用户,则设置了权限的文档不能看
				for _, k := range myResall {
					if strconv.FormatInt(v.Id, 10) == path.Base(k[1]) {
						docxarr[0].Permission = "4"
					}
				}
				for _, k := range myRes {
					if strconv.FormatInt(v.Id, 10) == path.Base(k[1]) {
						docxarr[0].Permission = k[2]
					}
				}
			} else { //如果用户没登录,则设置了权限的文档不能看
				for i, k := range myResall { //所有设置了权限的不能看
					if strconv.FormatInt(v.Id, 10) == path.Base(k[1]) {
						docxarr[0].Permission = "4"
					}
				}
			}

			docxarr[0].Id = v.Id
			docxarr[0].Title = v.FileName
			if path.Ext(v.FileName) == ".docx" || path.Ext(v.FileName) == ".DOCX" || path.Ext(v.FileName) == ".doc" || path.Ext(v.FileName) == ".DOC" {
				docxarr[0].Suffix = "docx"

			} else if path.Ext(v.FileName) == ".XLSX" || path.Ext(v.FileName) == ".xlsx" || path.Ext(v.FileName) == ".XLS" || path.Ext(v.FileName) == ".xls" {
				docxarr[0].Suffix = "xlsx"
			} else if path.Ext(v.FileName) == ".pptx" || path.Ext(v.FileName) == ".PPTX" || path.Ext(v.FileName) == ".ppt" || path.Ext(v.FileName) == ".PPT" {
				docxarr[0].Suffix = "pptx"
			} else if path.Ext(v.FileName) == ".pdf" || path.Ext(v.FileName) == ".PDF" {
				docxarr[0].Suffix = "pdf"
			} else if path.Ext(v.FileName) == ".txt" || path.Ext(v.FileName) == ".TXT" {
				docxarr[0].Suffix = "txt"
			}
			Docxslice = append(Docxslice, docxarr...)
		}
		linkarr[0].Docxlink = Docxslice
		Docxslice = make([]DocxLink, 0) //再把slice置0
		link = append(link, linkarr...)
	}
	c.Data["json"] = link //products
	c.ServeJSON()
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年04月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档