Esta pergunta é sobre a aplicação de regras do meu aplicativo que me confundem.
Meu controlador está usando o serviço e o serviço está usando o repositório.
public class CommentController: ApiController{
[HttpPost]
public bool EditComment(Comment comment){
commentService.Update(comment);
}
}
public class CommentService{
ICommentRepository repository;
....
....
public void Update(Comment comment){
repository.Update(comment);
}
}
Se o usuário estiver autenticado, ele poderá atualizar um comentário.
Mas um usuário deve editar seus próprios comentários.
Mas um administrador pode editar todos os comentários.
Mas o comentário não pode editar após uma data especificada.
Editar por um departamento
E eu tenho algo parecido com essas regras.
Se eu aplicar a regra "comentário de edição do usuário" na camada de serviço, alterarei a methot de atualização e passarei o parâmetro do controlador User.Identity.Name,
public class CommentService{
ICommentRepository repository;
....
....
public void Update(string updatedByThisUser, Comment comment){
// if updatedByThisUser is owner of comment
repository.Update(comment);
}
}
Mas, é verdade a alteração das operações de serviço por regra?
Estou um pouco confuso sobre onde posso aplicar as regras. No controlador ou no serviço ou no repositório.
Existe alguma maneira padrão de fazer isso como padrões de design.
[Authorize(Roles="member, admin")]
e agora todos os métodos de ação no Controller seriam acessíveis apenas pelos usuários na função de "membro" ou "administrador".