Skip to content

Commit

Permalink
Fix Role Clearing
Browse files Browse the repository at this point in the history
Role Cleaing wasn't taking into account the ID of the org/project that
was being removed.

clearRoles(User) was made an abstract function in MembershipDossier so
that implementation of it could access the specific Table members
needed to check against (Project#membership defines the MembersTable
  to be ProjectMembersTable which contains a projectId to check
  against in its implementation of clearRoles).

Signed-off-by: Jadon Fowler <[email protected]>
  • Loading branch information
phase committed Mar 19, 2018
1 parent 04fed77 commit d2a1bc3
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
2 changes: 2 additions & 0 deletions app/models/project/Project.scala
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ case class Project(override val id: Option[Int] = None,

def newMember(userId: Int): MemberType = new ProjectMember(this.model, userId)

def clearRoles(user: User): Unit = this.roleAccess.removeAll({ s => (s.userId === user.id.get) && (s.projectId === id.get) })

}

def this(pluginId: String, name: String, owner: String, ownerId: Int) = {
Expand Down
5 changes: 4 additions & 1 deletion app/models/user/Organization.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ package models.user
import java.sql.Timestamp

import com.google.common.base.Preconditions._
import db.impl.OrePostgresDriver.api._
import db.impl.access.UserBase
import db.impl.model.OreModel
import db.impl.{OrganizationMembersTable, OrganizationRoleTable, OrganizationTable}
import db.impl.table.ModelKeys._
import db.impl.{OrganizationMembersTable, OrganizationRoleTable, OrganizationTable}
import db.{Model, Named}
import models.user.role.OrganizationRole
import ore.organization.OrganizationMember
Expand Down Expand Up @@ -56,6 +57,8 @@ case class Organization(override val id: Option[Int] = None,

def newMember(userId: Int) = new OrganizationMember(this.model, userId)

def clearRoles(user: User): Unit = this.roleAccess.removeAll({ s => (s.userId === user.id.get) && (s.organizationId === id.get) })

}

/**
Expand Down
9 changes: 7 additions & 2 deletions app/ore/user/MembershipDossier.scala
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,15 @@ trait MembershipDossier {

private def association
= this.model.schema.getAssociation[MembersTable, User](this.membersTableClass, this.model)
private def roleAccess: ModelAccess[RoleType] = this.model.service.access[RoleType](roleClass)
def roleAccess: ModelAccess[RoleType] = this.model.service.access[RoleType](roleClass)
private def addMember(user: User) = this.association.add(user)

private def clearRoles(user: User) = this.roleAccess.removeAll(_.userId === user.id.get)
/**
* Clears the roles of a User
*
* @param user User instance
*/
def clearRoles(user: User): Unit

/**
* Constructs a new member object of the MemberType.
Expand Down

0 comments on commit d2a1bc3

Please sign in to comment.