Access control: FGAC for team sync endpoints (#44673) (#44856)

* add actions for team group sync

* extend the hook to allow specifying whether the user is external

* move user struct to type package

* interface for permission service to allow mocking it

* reuse existing permissions

* test fix

* refactor

* linting

(cherry picked from commit 602d62ebcc)

Co-authored-by: Ieva <ieva.vasiljeva@grafana.com>
This commit is contained in:
Grot (@grafanabot)
2022-02-03 15:48:13 +00:00
committed by GitHub
co-authored by Ieva
parent 9e0acc9ece
commit 358db0d130
14 changed files with 76 additions and 28 deletions
@@ -34,20 +34,20 @@ func (p *flatResourcePermission) Managed() bool {
}
func (s *AccessControlStore) SetUserResourcePermission(
ctx context.Context, orgID, userID int64,
ctx context.Context, orgID int64, user accesscontrol.User,
cmd accesscontrol.SetResourcePermissionCommand,
hook types.UserResourceHookFunc,
) (*accesscontrol.ResourcePermission, error) {
if userID == 0 {
if user.ID == 0 {
return nil, models.ErrUserNotFound
}
var err error
var permission *accesscontrol.ResourcePermission
err = s.sql.WithTransactionalDbSession(ctx, func(sess *sqlstore.DBSession) error {
permission, err = s.setResourcePermission(sess, orgID, managedUserRoleName(userID), s.userAdder(sess, orgID, userID), cmd)
permission, err = s.setResourcePermission(sess, orgID, managedUserRoleName(user.ID), s.userAdder(sess, orgID, user.ID), cmd)
if err == nil && hook != nil {
return hook(sess, orgID, userID, cmd.ResourceID, cmd.Permission)
return hook(sess, orgID, user, cmd.ResourceID, cmd.Permission)
}
return err