Skip to content
GitLab
Next
Menu
Why GitLab
Pricing
Contact Sales
Explore
Why GitLab
Pricing
Contact Sales
Explore
Sign in
Get free trial
Commits on Source (3)
(feat): enforce create_group permission
· 2fff24a1
Marcelo Rivera
authored
Sep 30, 2019
2fff24a1
(fix): update PermissionsService based on new permissions export
· d6fad37e
Marcelo Rivera
authored
Oct 02, 2019
d6fad37e
(feat): moved PermissionsService to its own folder and added Flags enum
· 533e999a
Marcelo Rivera
authored
Oct 02, 2019
533e999a
Hide whitespace changes
Inline
Side-by-side
src/app/common/components/post-menu/post-menu.component.ts
View file @
533e999a
...
...
@@ -15,7 +15,8 @@ import { BlockListService } from '../../services/block-list.service';
import
{
ActivityService
}
from
'
../../../common/services/activity.service
'
;
import
{
FeaturesService
}
from
'
../../../services/features.service
'
;
import
{
ShareModalComponent
}
from
'
../../../modules/modals/share/share
'
;
import
{
PermissionsService
}
from
'
../../services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../../services/permissions/permissions.service
'
;
import
{
Flags
}
from
'
../../services/permissions/flags
'
;
type
Option
=
|
'
edit
'
...
...
@@ -372,7 +373,7 @@ export class PostMenuComponent {
checkEditPermissions
()
{
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
return
this
.
permissionsService
.
canInteract
(
this
.
entity
,
'
edit_post
'
);
return
this
.
permissionsService
.
canInteract
(
this
.
entity
,
Flags
.
EDIT_POST
);
}
return
(
...
...
@@ -383,7 +384,10 @@ export class PostMenuComponent {
checkDeletePermissions
()
{
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
return
this
.
permissionsService
.
canInteract
(
this
.
entity
,
'
delete_post
'
);
return
this
.
permissionsService
.
canInteract
(
this
.
entity
,
Flags
.
DELETE_POST
);
}
return
(
...
...
src/app/common/services/permissions/flags.ts
0 → 100644
View file @
533e999a
export
enum
Flags
{
APPOINT_ADMIN
=
'
appoint_admin
'
,
APPOINT_MODERATOR
=
'
appoint_moderator
'
,
APPROVE_SUBSCRIBER
=
'
approve_subscriber
'
,
CREATE_CHANNEL
=
'
create_channel
'
,
CREATE_COMMENT
=
'
create_comment
'
,
CREATE_GROUP
=
'
create_group
'
,
CREATE_POST
=
'
create_post
'
,
DELETE_CHANNEL
=
'
delete_channel
'
,
DELETE_COMMENT
=
'
delete_comment
'
,
DELETE_GROUP
=
'
delete_group
'
,
DELETE_POST
=
'
delete_post
'
,
EDIT_CHANNEL
=
'
edit_channel
'
,
EDIT_COMMENT
=
'
edit_comment
'
,
EDIT_GROUP
=
'
edit_group
'
,
EDIT_POST
=
'
edit_post
'
,
INVITE
=
'
invite
'
,
JOIN
=
'
join
'
,
JOIN_GATHERING
=
'
gathering
'
,
MESSAGE
=
'
message
'
,
SUBSCRIBE
=
'
subscribe
'
,
TAG
=
'
tag
'
,
REMIND
=
'
remind
'
,
VIEW
=
'
wire
'
,
VOTE
=
'
vote
'
,
}
src/app/common/services/permissions.service.ts
→
src/app/common/services/permissions
/permissions
.service.ts
View file @
533e999a
import
{
Flags
}
from
'
./flags
'
;
export
type
Permissions
=
{
name
:
string
;
permissions
:
string
[];
};
export
class
PermissionsService
{
canInteract
(
entity
:
any
,
permission
:
string
)
{
canInteract
(
entity
:
any
,
permission
:
Flags
)
{
let
permissions
:
Permissions
=
entity
.
permissions
;
if
(
!
permissions
)
{
return
false
;
}
return
(
permissions
&&
permissions
.
permissions
.
findIndex
(
item
=>
item
===
permission
)
!==
-
1
);
}
...
...
src/app/modules/channels/channel.component.ts
View file @
533e999a
...
...
@@ -17,7 +17,7 @@ import { Observable } from 'rxjs';
import
{
DialogService
}
from
'
../../common/services/confirm-leave-dialog.service
'
;
import
{
BlockListService
}
from
'
../../common/services/block-list.service
'
;
import
{
ChannelSortedComponent
}
from
'
./sorted/sorted.component
'
;
import
{
PermissionsService
}
from
'
../../common/services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../../common/services/permissions
/permissions
.service
'
;
import
{
ClientMetaService
}
from
'
../../common/services/client-meta.service
'
;
@
Component
({
...
...
src/app/modules/comments/comment/comment.component.ts
View file @
533e999a
...
...
@@ -32,7 +32,8 @@ import { FeaturesService } from '../../../services/features.service';
import
{
MindsVideoComponent
}
from
'
../../media/components/video/video.component
'
;
import
{
MediaModalComponent
}
from
'
../../media/modal/modal.component
'
;
import
isMobile
from
'
../../../helpers/is-mobile
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions/permissions.service
'
;
import
{
Flags
}
from
'
../../../common/services/permissions/flags
'
;
@
Component
({
selector
:
'
m-comment
'
,
...
...
@@ -385,7 +386,10 @@ export class CommentComponentV2
checkEditPermissions
()
{
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
return
this
.
permissionsService
.
canInteract
(
this
.
comment
,
'
edit_comment
'
);
return
this
.
permissionsService
.
canInteract
(
this
.
comment
,
Flags
.
EDIT_COMMENT
);
}
return
(
...
...
@@ -399,7 +403,7 @@ export class CommentComponentV2
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
return
this
.
permissionsService
.
canInteract
(
this
.
comment
,
'
delete_comment
'
Flags
.
DELETE_COMMENT
);
}
...
...
src/app/modules/comments/thread/thread.component.ts
View file @
533e999a
...
...
@@ -24,7 +24,8 @@ import { ActivityService } from '../../../common/services/activity.service';
import
{
Subscription
}
from
'
rxjs
'
;
import
{
TouchSequence
}
from
'
selenium-webdriver
'
;
import
{
FeaturesService
}
from
'
../../../services/features.service
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions/permissions.service
'
;
import
{
Flags
}
from
'
../../../common/services/permissions/flags
'
;
@
Component
({
selector
:
'
m-comments__thread
'
,
...
...
@@ -94,7 +95,7 @@ export class CommentsThreadComponent implements OnInit {
// TODO: maybe there should be a "view comment" flag?
this
.
canPost
=
await
this
.
permissionsService
.
canInteract
(
this
.
entity
,
'
create_comment
'
Flags
.
CREATE_COMMENT
);
}
}
...
...
src/app/modules/groups/create/can-create-group-guard.service.ts
0 → 100644
View file @
533e999a
import
{
Injectable
}
from
'
@angular/core
'
;
import
{
ActivatedRouteSnapshot
,
CanActivate
,
Router
,
RouterStateSnapshot
,
}
from
'
@angular/router
'
;
import
{
FeaturesService
}
from
'
../../../services/features.service
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions/permissions.service
'
;
import
{
Session
}
from
'
../../../services/session
'
;
import
{
Flags
}
from
'
../../../common/services/permissions/flags
'
;
@
Injectable
()
export
class
CanCreateGroupGuardService
implements
CanActivate
{
constructor
(
private
router
:
Router
,
private
featuresService
:
FeaturesService
,
private
permissionsService
:
PermissionsService
,
private
session
:
Session
)
{}
canActivate
(
route
:
ActivatedRouteSnapshot
,
state
:
RouterStateSnapshot
)
{
if
(
!
this
.
session
.
getLoggedInUser
())
{
this
.
router
.
navigate
([
'
/login
'
]);
return
false
;
}
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
return
this
.
permissionsService
.
canInteract
(
this
.
session
.
getLoggedInUser
(),
Flags
.
CREATE_GROUP
);
}
return
true
;
}
}
src/app/modules/groups/groups.module.ts
View file @
533e999a
...
...
@@ -38,6 +38,7 @@ import { NewsfeedModule } from '../newsfeed/newsfeed.module';
import
{
GroupsProfileReviewComponent
}
from
'
./profile/review/review.component
'
;
import
{
GroupsKickModalComponent
}
from
'
./kick-modal/kick-modal.component
'
;
import
{
TextInputAutocompleteModule
}
from
'
../../common/components/autocomplete
'
;
import
{
CanCreateGroupGuardService
}
from
'
./create/can-create-group-guard.service
'
;
const
routes
:
Routes
=
[
{
...
...
@@ -54,7 +55,11 @@ const routes: Routes = [
{
path
:
'
requests
'
,
component
:
GroupsProfileRequests
},
],
},
{
path
:
'
groups/create
'
,
component
:
GroupsCreator
},
{
path
:
'
groups/create
'
,
component
:
GroupsCreator
,
canActivate
:
[
CanCreateGroupGuardService
],
},
{
path
:
'
groups/:filter
'
,
component
:
GroupsListComponent
},
{
path
:
'
groups
'
,
redirectTo
:
'
/groups/top
'
,
pathMatch
:
'
full
'
},
];
...
...
@@ -117,6 +122,6 @@ const routes: Routes = [
GroupsSidebarMarkersComponent
,
],
entryComponents
:
[
GroupsCard
,
GroupsSidebarMarkersComponent
],
providers
:
[
CanDeactivateGroupService
],
providers
:
[
CanCreateGroupGuardService
,
CanDeactivateGroupService
],
})
export
class
GroupsModule
{}
src/app/modules/groups/profile/groups-settings-button.ts
View file @
533e999a
...
...
@@ -7,7 +7,8 @@ import { OverlayModalService } from '../../../services/ux/overlay-modal';
import
{
Client
}
from
'
../../../services/api/client
'
;
import
{
Session
}
from
'
../../../services/session
'
;
import
{
FeaturesService
}
from
'
../../../services/features.service
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../../../common/services/permissions/permissions.service
'
;
import
{
Flags
}
from
'
../../../common/services/permissions/flags
'
;
@
Component
({
selector
:
'
minds-groups-settings-button
'
,
...
...
@@ -311,7 +312,10 @@ export class GroupsSettingsButton {
checkDeletePermissions
()
{
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
return
this
.
permissionsService
.
canInteract
(
this
.
group
,
'
delete_group
'
);
return
this
.
permissionsService
.
canInteract
(
this
.
group
,
Flags
.
DELETE_GROUP
);
}
return
true
;
...
...
src/app/modules/legacy/components/buttons/remind.ts
View file @
533e999a
...
...
@@ -3,8 +3,9 @@ import { Component, ChangeDetectionStrategy, Input } from '@angular/core';
import
{
Session
}
from
'
../../../../services/session
'
;
import
{
Client
}
from
'
../../../../services/api
'
;
import
{
SignupModalService
}
from
'
../../../../modules/modals/signup/service
'
;
import
{
PermissionsService
}
from
'
../../../../common/services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../../../../common/services/permissions
/permissions
.service
'
;
import
{
FeaturesService
}
from
'
../../../../services/features.service
'
;
import
{
Flags
}
from
'
../../../../common/services/permissions/flags
'
;
// had forwardRef(() => RemindComposerModal)
@
Component
({
...
...
@@ -55,7 +56,10 @@ export class RemindButton {
private
checkPermissions
()
{
if
(
this
.
featuresService
.
has
(
'
permissions
'
))
{
this
.
enabled
=
this
.
permissionsService
.
canInteract
(
this
.
object
,
'
remind
'
);
this
.
enabled
=
this
.
permissionsService
.
canInteract
(
this
.
object
,
Flags
.
REMIND
);
}
else
{
this
.
enabled
=
true
;
}
...
...
src/app/services/providers.ts
View file @
533e999a
...
...
@@ -46,7 +46,7 @@ import { AuthService } from './auth.service';
import
{
SiteService
}
from
'
../common/services/site.service
'
;
import
{
SessionsStorageService
}
from
'
./session-storage.service
'
;
import
{
DiagnosticsService
}
from
'
./diagnostics.service
'
;
import
{
PermissionsService
}
from
'
../common/services/permissions.service
'
;
import
{
PermissionsService
}
from
'
../common/services/permissions
/permissions
.service
'
;
export
const
MINDS_PROVIDERS
:
any
[]
=
[
SiteService
,
...
...