Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
770acee5
Unverified
Commit
770acee5
authored
Apr 30, 2018
by
Marcus Efraimsson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
new property for current user indicating if edit permissions in folders
parent
4f7791b9
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
123 additions
and
31 deletions
+123
-31
pkg/api/dtos/models.go
+16
-15
pkg/api/index.go
+21
-15
pkg/models/folders.go
+9
-0
pkg/services/sqlstore/dashboard.go
+25
-0
pkg/services/sqlstore/dashboard_folder_test.go
+52
-1
No files found.
pkg/api/dtos/models.go
View file @
770acee5
...
@@ -22,21 +22,22 @@ type LoginCommand struct {
...
@@ -22,21 +22,22 @@ type LoginCommand struct {
}
}
type
CurrentUser
struct
{
type
CurrentUser
struct
{
IsSignedIn
bool
`json:"isSignedIn"`
IsSignedIn
bool
`json:"isSignedIn"`
Id
int64
`json:"id"`
Id
int64
`json:"id"`
Login
string
`json:"login"`
Login
string
`json:"login"`
Email
string
`json:"email"`
Email
string
`json:"email"`
Name
string
`json:"name"`
Name
string
`json:"name"`
LightTheme
bool
`json:"lightTheme"`
LightTheme
bool
`json:"lightTheme"`
OrgCount
int
`json:"orgCount"`
OrgCount
int
`json:"orgCount"`
OrgId
int64
`json:"orgId"`
OrgId
int64
`json:"orgId"`
OrgName
string
`json:"orgName"`
OrgName
string
`json:"orgName"`
OrgRole
m
.
RoleType
`json:"orgRole"`
OrgRole
m
.
RoleType
`json:"orgRole"`
IsGrafanaAdmin
bool
`json:"isGrafanaAdmin"`
IsGrafanaAdmin
bool
`json:"isGrafanaAdmin"`
GravatarUrl
string
`json:"gravatarUrl"`
GravatarUrl
string
`json:"gravatarUrl"`
Timezone
string
`json:"timezone"`
Timezone
string
`json:"timezone"`
Locale
string
`json:"locale"`
Locale
string
`json:"locale"`
HelpFlags1
m
.
HelpFlags1
`json:"helpFlags1"`
HelpFlags1
m
.
HelpFlags1
`json:"helpFlags1"`
HasEditPermissionInFolders
bool
`json:"hasEditPermissionInFolders"`
}
}
type
MetricRequest
struct
{
type
MetricRequest
struct
{
...
...
pkg/api/index.go
View file @
770acee5
...
@@ -42,23 +42,29 @@ func setIndexViewData(c *m.ReqContext) (*dtos.IndexViewData, error) {
...
@@ -42,23 +42,29 @@ func setIndexViewData(c *m.ReqContext) (*dtos.IndexViewData, error) {
settings
[
"appSubUrl"
]
=
""
settings
[
"appSubUrl"
]
=
""
}
}
hasEditPermissionInFoldersQuery
:=
m
.
HasEditPermissionInFoldersQuery
{
SignedInUser
:
c
.
SignedInUser
}
if
err
:=
bus
.
Dispatch
(
&
hasEditPermissionInFoldersQuery
);
err
!=
nil
{
return
nil
,
err
}
var
data
=
dtos
.
IndexViewData
{
var
data
=
dtos
.
IndexViewData
{
User
:
&
dtos
.
CurrentUser
{
User
:
&
dtos
.
CurrentUser
{
Id
:
c
.
UserId
,
Id
:
c
.
UserId
,
IsSignedIn
:
c
.
IsSignedIn
,
IsSignedIn
:
c
.
IsSignedIn
,
Login
:
c
.
Login
,
Login
:
c
.
Login
,
Email
:
c
.
Email
,
Email
:
c
.
Email
,
Name
:
c
.
Name
,
Name
:
c
.
Name
,
OrgCount
:
c
.
OrgCount
,
OrgCount
:
c
.
OrgCount
,
OrgId
:
c
.
OrgId
,
OrgId
:
c
.
OrgId
,
OrgName
:
c
.
OrgName
,
OrgName
:
c
.
OrgName
,
OrgRole
:
c
.
OrgRole
,
OrgRole
:
c
.
OrgRole
,
GravatarUrl
:
dtos
.
GetGravatarUrl
(
c
.
Email
),
GravatarUrl
:
dtos
.
GetGravatarUrl
(
c
.
Email
),
IsGrafanaAdmin
:
c
.
IsGrafanaAdmin
,
IsGrafanaAdmin
:
c
.
IsGrafanaAdmin
,
LightTheme
:
prefs
.
Theme
==
"light"
,
LightTheme
:
prefs
.
Theme
==
"light"
,
Timezone
:
prefs
.
Timezone
,
Timezone
:
prefs
.
Timezone
,
Locale
:
locale
,
Locale
:
locale
,
HelpFlags1
:
c
.
HelpFlags1
,
HelpFlags1
:
c
.
HelpFlags1
,
HasEditPermissionInFolders
:
hasEditPermissionInFoldersQuery
.
Result
,
},
},
Settings
:
settings
,
Settings
:
settings
,
Theme
:
prefs
.
Theme
,
Theme
:
prefs
.
Theme
,
...
...
pkg/models/folders.go
View file @
770acee5
...
@@ -89,3 +89,12 @@ type UpdateFolderCommand struct {
...
@@ -89,3 +89,12 @@ type UpdateFolderCommand struct {
Result
*
Folder
Result
*
Folder
}
}
//
// QUERIES
//
type
HasEditPermissionInFoldersQuery
struct
{
SignedInUser
*
SignedInUser
Result
bool
}
pkg/services/sqlstore/dashboard.go
View file @
770acee5
...
@@ -24,6 +24,7 @@ func init() {
...
@@ -24,6 +24,7 @@ func init() {
bus
.
AddHandler
(
"sql"
,
GetDashboardPermissionsForUser
)
bus
.
AddHandler
(
"sql"
,
GetDashboardPermissionsForUser
)
bus
.
AddHandler
(
"sql"
,
GetDashboardsBySlug
)
bus
.
AddHandler
(
"sql"
,
GetDashboardsBySlug
)
bus
.
AddHandler
(
"sql"
,
ValidateDashboardBeforeSave
)
bus
.
AddHandler
(
"sql"
,
ValidateDashboardBeforeSave
)
bus
.
AddHandler
(
"sql"
,
HasEditPermissionInFolders
)
}
}
var
generateNewUid
func
()
string
=
util
.
GenerateShortUid
var
generateNewUid
func
()
string
=
util
.
GenerateShortUid
...
@@ -614,3 +615,27 @@ func ValidateDashboardBeforeSave(cmd *m.ValidateDashboardBeforeSaveCommand) (err
...
@@ -614,3 +615,27 @@ func ValidateDashboardBeforeSave(cmd *m.ValidateDashboardBeforeSaveCommand) (err
return
nil
return
nil
})
})
}
}
func
HasEditPermissionInFolders
(
query
*
m
.
HasEditPermissionInFoldersQuery
)
error
{
if
query
.
SignedInUser
.
HasRole
(
m
.
ROLE_EDITOR
)
{
query
.
Result
=
true
return
nil
}
builder
:=
&
SqlBuilder
{}
builder
.
Write
(
"SELECT COUNT(dashboard.id) AS count FROM dashboard WHERE dashboard.org_id = ? AND dashboard.is_folder = ?"
,
query
.
SignedInUser
.
OrgId
,
dialect
.
BooleanStr
(
true
))
builder
.
writeDashboardPermissionFilter
(
query
.
SignedInUser
,
m
.
PERMISSION_EDIT
)
type
folderCount
struct
{
Count
int64
}
resp
:=
make
([]
*
folderCount
,
0
)
if
err
:=
x
.
Sql
(
builder
.
GetSqlString
(),
builder
.
params
...
)
.
Find
(
&
resp
);
err
!=
nil
{
return
err
}
query
.
Result
=
len
(
resp
)
>
0
&&
resp
[
0
]
.
Count
>
0
return
nil
}
pkg/services/sqlstore/dashboard_folder_test.go
View file @
770acee5
...
@@ -221,7 +221,6 @@ func TestDashboardFolderDataAccess(t *testing.T) {
...
@@ -221,7 +221,6 @@ func TestDashboardFolderDataAccess(t *testing.T) {
})
})
Convey
(
"Given two dashboard folders"
,
func
()
{
Convey
(
"Given two dashboard folders"
,
func
()
{
folder1
:=
insertTestDashboard
(
"1 test dash folder"
,
1
,
0
,
true
,
"prod"
)
folder1
:=
insertTestDashboard
(
"1 test dash folder"
,
1
,
0
,
true
,
"prod"
)
folder2
:=
insertTestDashboard
(
"2 test dash folder"
,
1
,
0
,
true
,
"prod"
)
folder2
:=
insertTestDashboard
(
"2 test dash folder"
,
1
,
0
,
true
,
"prod"
)
insertTestDashboard
(
"folder in another org"
,
2
,
0
,
true
,
"prod"
)
insertTestDashboard
(
"folder in another org"
,
2
,
0
,
true
,
"prod"
)
...
@@ -264,6 +263,15 @@ func TestDashboardFolderDataAccess(t *testing.T) {
...
@@ -264,6 +263,15 @@ func TestDashboardFolderDataAccess(t *testing.T) {
So
(
query
.
Result
[
1
]
.
DashboardId
,
ShouldEqual
,
folder2
.
Id
)
So
(
query
.
Result
[
1
]
.
DashboardId
,
ShouldEqual
,
folder2
.
Id
)
So
(
query
.
Result
[
1
]
.
Permission
,
ShouldEqual
,
m
.
PERMISSION_ADMIN
)
So
(
query
.
Result
[
1
]
.
Permission
,
ShouldEqual
,
m
.
PERMISSION_ADMIN
)
})
})
Convey
(
"should have edit permission in folders"
,
func
()
{
query
:=
&
m
.
HasEditPermissionInFoldersQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
adminUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_ADMIN
},
}
err
:=
HasEditPermissionInFolders
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeTrue
)
})
})
})
Convey
(
"Editor users"
,
func
()
{
Convey
(
"Editor users"
,
func
()
{
...
@@ -310,6 +318,14 @@ func TestDashboardFolderDataAccess(t *testing.T) {
...
@@ -310,6 +318,14 @@ func TestDashboardFolderDataAccess(t *testing.T) {
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder2
.
Id
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder2
.
Id
)
})
})
Convey
(
"should have edit permission in folders"
,
func
()
{
query
:=
&
m
.
HasEditPermissionInFoldersQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
editorUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_EDITOR
},
}
err
:=
HasEditPermissionInFolders
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeTrue
)
})
})
})
Convey
(
"Viewer users"
,
func
()
{
Convey
(
"Viewer users"
,
func
()
{
...
@@ -353,6 +369,41 @@ func TestDashboardFolderDataAccess(t *testing.T) {
...
@@ -353,6 +369,41 @@ func TestDashboardFolderDataAccess(t *testing.T) {
So
(
len
(
query
.
Result
),
ShouldEqual
,
1
)
So
(
len
(
query
.
Result
),
ShouldEqual
,
1
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder1
.
Id
)
So
(
query
.
Result
[
0
]
.
Id
,
ShouldEqual
,
folder1
.
Id
)
})
})
Convey
(
"should not have edit permission in folders"
,
func
()
{
query
:=
&
m
.
HasEditPermissionInFoldersQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
viewerUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_VIEWER
},
}
err
:=
HasEditPermissionInFolders
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeFalse
)
})
Convey
(
"and admin permission is given for user with org role viewer in one dashboard folder"
,
func
()
{
testHelperUpdateDashboardAcl
(
folder1
.
Id
,
m
.
DashboardAcl
{
DashboardId
:
folder1
.
Id
,
OrgId
:
1
,
UserId
:
viewerUser
.
Id
,
Permission
:
m
.
PERMISSION_ADMIN
})
Convey
(
"should have edit permission in folders"
,
func
()
{
query
:=
&
m
.
HasEditPermissionInFoldersQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
viewerUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_VIEWER
},
}
err
:=
HasEditPermissionInFolders
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeTrue
)
})
})
Convey
(
"and edit permission is given for user with org role viewer in one dashboard folder"
,
func
()
{
testHelperUpdateDashboardAcl
(
folder1
.
Id
,
m
.
DashboardAcl
{
DashboardId
:
folder1
.
Id
,
OrgId
:
1
,
UserId
:
viewerUser
.
Id
,
Permission
:
m
.
PERMISSION_EDIT
})
Convey
(
"should have edit permission in folders"
,
func
()
{
query
:=
&
m
.
HasEditPermissionInFoldersQuery
{
SignedInUser
:
&
m
.
SignedInUser
{
UserId
:
viewerUser
.
Id
,
OrgId
:
1
,
OrgRole
:
m
.
ROLE_VIEWER
},
}
err
:=
HasEditPermissionInFolders
(
query
)
So
(
err
,
ShouldBeNil
)
So
(
query
.
Result
,
ShouldBeTrue
)
})
})
})
})
})
})
})
})
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment