J'ai la classe AuthActivityAttribute. Le but de cette classe est d'autoriser l'utilisateur à effectuer une activité spécifique.Attributs personnalisés C# ne fonctionne pas
Attribut Classe:
[AttributeUsage(AttributeTargets.All)]
public class AuthActivityAttribute : Attribute
{
#region Properties
public string ActivityName { get; set; }
#endregion
#region Constructor
public AuthActivityAttribute()
{
}
#endregion
#region MemberFunctions
private List<aspnetactivities> GetUserActivities(ApplicationUser currentUser)
{
IList<string> roles = DALAccessObjectObj.UserDALObj.GetUserRoles(currentUser);
List<aspnetactivities> lstAspnetActivites = new List<aspnetactivities>();
foreach (string role in roles)
{
List<aspnetactivities> activities = DALAccessObjectObj.UserDALObj.GetRoleActivity(role);
lstAspnetActivites.AddRange(activities);
}
return lstAspnetActivites;
}
public void ValidateUserActivity()
{
DALAccessObjectObj.UserDALObj = new UserDAL();
ApplicationUser currentUser = DALAccessObjectObj.UserDALObj.GetUserById(HttpContext.Current.User.Identity.GetUserId());
if (GetUserActivities(currentUser).Where(r => r.ActivityName.Equals(ActivityName, StringComparison.InvariantCultureIgnoreCase)
).Select(r => r).Count() > 0)
{
throw new Exception(string.Format("User is not allowed to perform activity named : {0}", ActivityName));
}
}
#endregion
}
J'ai une classe de contrôleur de compte. Tout ce dont j'ai besoin, c'est que l'utilisateur ne peut être enregistré que s'il est autorisé à effectuer une activité d'enregistrement. Cependant, lorsque j'envoie la requête, l'attribut ne valide rien. S'il vous plaît laissez-moi savoir est-ce que je manque quelque chose ou quoi?
classe décorée avec l'attribut
public class AccountController : BaseApiController
{
[AuthActivityAttribute(ActivityName = "Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
// do something ...
}
}
par exemple: nous avons mis la validation sur la propriété comme [MaxLength (10)] pour valider que la propriété doit avoir une longueur inférieure à 10 ou Autorisez attribut en C# . comme seul administrateur peut accéder à la méthode spécifique. Donc c'est quelque chose que je dois réaliser
[Authorize("Administrator")]
public void DeleteUser()
{
// do something
}
Qu'est-ce que je veux?
[AuthActivity("DeleteUser")]
public void DeleteUser()
{
// do something
}
Alors, qu'espériez-vous utiliser l'attribut pour effectuer la validation? Qu'est-ce que 'PlanhayAttributeBase'? –
chère @JonSkeet s'il vous plaît vérifier à nouveau je l'ai édité. –
Eh bien, vous avez changé la classe de base. Vous n'avez toujours pas expliqué pourquoi vous vous attendiez à ce que l'attribut fasse automatiquement quelque chose. Les attributs ne font pas simplement magiquement exécuter le code - quelque chose doit * trouver * tous les attributs pertinents et agir en conséquence. Que comptez-vous faire dans votre cas? –