Configurations
public interface IIssueStateMachineConfiguration : IStateMachineConfiguration<Issue, IssueState, IssueAction>
{}
public abstract class IssueStateMachineConfiguration : StateMachineConfiguration, IIssueStateMachineConfiguration
{
protected readonly ICurrentUserService CurrentUserService;
protected IssueStateMachineConfigurator(ICurrentUserService currentUserService)
=> CurrentUserService = currentUserService;
}
// Configuration for IssueState.Draft.
public class DraftIssueStateMachineConfiguration : IssueStateMachineConfiguration
{
public DraftIssueStateMachineConfiguration(ICurrentUserService currentUserService) : base(currentUserService)
{}
protected override void Configure(Stateless.StateMachine<IssueState, IssueAction> stateMachine, Issue entity)
{
// Getting current user.
ICurrentUser currentUser = CurrentUserService.CurrentUser;
// Getting info about current user for specified issue.
bool isAdmin = currentUser.HasRole("Admin");
bool isAuthor = issue.AuthorId == currentUser.Id;
bool isAssignee = issue.AssigneeId == currentUser.Id;
stateMachine.Configure(IssueState.Draft)
.PermitIf(IssueAction.Submit, IssueState.Submitted, () => isAuthor)
.InternalTransitionIf(IssueAction.Edit, () => isAuthor)
.InternalTransitionIf(IssueAction.Delete, () => isAuthor);
}
}
/* ... and other configuration for other states here ...*/Last updated