我试图了解什么是实现以下目标的最佳方法: 作为管理员,我能够创建功能包。每个功能包都是应用程序中的一个实体,其中包括用户可以购买的功能的集合。
public class FeaturesPackage
{
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[MaxLength(30)]
[Required]
public string Title{ get; set; }
[Required]
public string Features { get; set; }
public decimal Price { get; set; }
}
例如: 青铜色软件包可以具有以下功能:“可以创建提醒,可以看到分析等”。
每个用户可以购买多个包裹。使用此模型对此进行描述:
public class FeaturesPackagePurchase
{
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
[ForeignKey("Owner")]
public int OwnerId { get; set; }
[Required]
[ForeignKey("FeaturesPackage")]
public Guid FeaturesPackageId { get; set; }
[Required]
public DateTime PurchaseDate { get; set; }
[Required]
public decimal Price { get; set; }
public DateTime StartDate { get; set; }
public DateTime ExpirationDate { get; set; }
public UserAppData Owner { get; set; }
public FeaturesPackage FeaturesPackage { get; set; }
}
现在,我想为具有指定打开功能的用户阻止某些控制器方法(路由)。像
[Authorize(Feature="can-see-analytics")]
public AnalyticsData GetUserAnalytics(){ }
为每个功能创建新策略似乎很复杂。有更好的方法吗?