我有一个BookCreateModel,它包含书籍的平面信息,例如Title,PublishYear&etc以及书籍作者集合(复杂类型):
public class BookCreateModel
{
public string Title { get; set; }
public int Year { get; set; }
public IList<AuthorEntryModel> Authors { get; set; }
}
public class AuthorEntryModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在CreateBook视图中我使用了EditorFor
helper:
@Html.EditorFor(m => m.Authors, "AuthorSelector")
Run Code Online (Sandbox Code Playgroud)
和AuthorSelector模板如下:
<div class="ptr_authors_wrapper">
@for (int i = 0; i < Model.Count; i++)
{
<div class="ptr_author_line" data-line-index="@i">
@Html.TextBoxFor(o => o[i].FirstName)
@Html.TextBoxFor(o => o[i].LastName)
</div>
}
</div>
<script> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的MVC应用程序实现一种新的基于权限的访问方法; 我们有几个权限组,每个组都包含一个权限列表.例如,我们有Invoices
权限组,其中包含CreateInvoice,RemoveInvoice,etc
权限密钥.
在这种方法中,每个mvc Action
都需要特定的执行权限.我正在尝试通过CustomAttributes执行此操作,如下所示:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
为了让开发人员更容易记住不同的权限组和权限密钥,我正在尝试创建一个预定义的权限列表,该权限应该是权限组和权限密钥的组合.但由于在C#中使用属性参数的限制,我无法使其工作.(我不想制作一个额外的大型枚举器并将所有权限密钥放在那里)
我的最后一次尝试是为每个权限组创建一个枚举器,然后在其中将权限键定义为枚举常量:
public class PermissionEnums
{
[PermissionGroup(PermissionGroupCode.Invoice)]
public enum Invoices
{
CreateInvoice = 1,
UpdateInvoice = 2,
RemoveInvoice = 3,
ManageAttachments = 4
}
[PermissionGroup(PermissionGroupCode.UserAccounts)]
public enum UserAccounts
{
Create = 1,
ChangePassword = 2
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我们在这里有代码组合,使用PermissionGroup
属性指定的权限组密钥和在每个枚举常量上指定为数字代码的权限密钥的代码.
RequirePermission属性定义如下:
public class RequirePermissionAttribute : Attribute
{
private Enum _Permission; …
Run Code Online (Sandbox Code Playgroud)