mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 00:20:25 +08:00 
			
		
		
		
	fix incorrect role labels for migrated issues and comments (#22914)
Fix #22797. ## Reason If a comment was migrated from other platforms, this comment may have an original author and its poster is always not the original author. When the `roleDescriptor` func get the poster's role descriptor for a comment, it does not check if the comment has an original author. So the migrated comments' original authors might be marked as incorrect roles. --------- Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -1244,3 +1244,8 @@ func FixCommentTypeLabelWithOutsideLabels(ctx context.Context) (int64, error) {
 | 
			
		||||
 | 
			
		||||
	return res.RowsAffected()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasOriginalAuthor returns if a comment was migrated and has an original author.
 | 
			
		||||
func (c *Comment) HasOriginalAuthor() bool {
 | 
			
		||||
	return c.OriginalAuthor != "" && c.OriginalAuthorID != 0
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2403,3 +2403,8 @@ func DeleteOrphanedIssues(ctx context.Context) error {
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasOriginalAuthor returns if an issue was migrated and has an original author.
 | 
			
		||||
func (issue *Issue) HasOriginalAuthor() bool {
 | 
			
		||||
	return issue.OriginalAuthor != "" && issue.OriginalAuthorID != 0
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1142,7 +1142,11 @@ func NewIssuePost(ctx *context.Context) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// roleDescriptor returns the Role Descriptor for a comment in/with the given repo, poster and issue
 | 
			
		||||
func roleDescriptor(ctx stdCtx.Context, repo *repo_model.Repository, poster *user_model.User, issue *issues_model.Issue) (issues_model.RoleDescriptor, error) {
 | 
			
		||||
func roleDescriptor(ctx stdCtx.Context, repo *repo_model.Repository, poster *user_model.User, issue *issues_model.Issue, hasOriginalAuthor bool) (issues_model.RoleDescriptor, error) {
 | 
			
		||||
	if hasOriginalAuthor {
 | 
			
		||||
		return issues_model.RoleDescriptorNone, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	perm, err := access_model.GetUserRepoPermission(ctx, repo, poster)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return issues_model.RoleDescriptorNone, err
 | 
			
		||||
@@ -1444,7 +1448,7 @@ func ViewIssue(ctx *context.Context) {
 | 
			
		||||
	// check if dependencies can be created across repositories
 | 
			
		||||
	ctx.Data["AllowCrossRepositoryDependencies"] = setting.Service.AllowCrossRepositoryDependencies
 | 
			
		||||
 | 
			
		||||
	if issue.ShowRole, err = roleDescriptor(ctx, repo, issue.Poster, issue); err != nil {
 | 
			
		||||
	if issue.ShowRole, err = roleDescriptor(ctx, repo, issue.Poster, issue, issue.HasOriginalAuthor()); err != nil {
 | 
			
		||||
		ctx.ServerError("roleDescriptor", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
@@ -1483,7 +1487,7 @@ func ViewIssue(ctx *context.Context) {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			comment.ShowRole, err = roleDescriptor(ctx, repo, comment.Poster, issue)
 | 
			
		||||
			comment.ShowRole, err = roleDescriptor(ctx, repo, comment.Poster, issue, comment.HasOriginalAuthor())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				ctx.ServerError("roleDescriptor", err)
 | 
			
		||||
				return
 | 
			
		||||
@@ -1582,7 +1586,7 @@ func ViewIssue(ctx *context.Context) {
 | 
			
		||||
							continue
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						c.ShowRole, err = roleDescriptor(ctx, repo, c.Poster, issue)
 | 
			
		||||
						c.ShowRole, err = roleDescriptor(ctx, repo, c.Poster, issue, c.HasOriginalAuthor())
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							ctx.ServerError("roleDescriptor", err)
 | 
			
		||||
							return
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user