0

我有几个模型,我想显示一些用于操作链接的常用图标(新建、详细信息、编辑、删除)和一些仅适用于某些模型的特定图标;这些图标链接只能在用户有权执行操作时显示。权限由角色决定,但我想将它们抽象化,以便明确需要的角色只写在一个地方。

我还想使用相同的逻辑来显示图标和“保护”操作方法,这样如果Foo以前需要角色来编辑 lolcatz,现在我想将其更改为Bar角色,我只需要更改一件事.

有很多方法可以实现这一点,我不确定如何进行。

我可以编写一个ModelAction类,负责决定单个操作的权限、链接、图标、文本,还有一些ModelActionsCollection负责为单个模型收集所有可能的操作,这样我就可以编写一个父类和几个下降的类。

我的疑惑:

  • 我应该如何将模型与ModelActionsCollection?我应该使用散列还是一些静态类,比如SomeStaticClass.GetModelActionsCollection(someModel)?或typeof(someModel),或"className"或什么?

  • 我应该如何装饰方法?我应该写类似的东西:

    [MyAuthorize("action", "model")]
    public ActionResult action(...)
    

    或者是其他东西?

  • 可以直接在这些类的方法中访问当前经过身份验证的用户,还是应该接收用户作为参数?

  • 这些类属于什么命名空间?他们是模特吗?帮手?或者是什么?

  • 最后:是否有人已经以可重用的方式完成了所有这些工作?

4

1 回答 1

0

我们正是这样做的

使用权限类型标志和 css 中图标的字符串装饰您的操作,例如 [ActionModelPermission(typeof(ContactModel), PermissionTypes.Create | PermissionTypes.Edit, "typeIcon typeContact")]

ActionModelPermission、PermissionTypes 和 ContactModel 都是我们项目中的类。

然后我们有自己的 ActionLink 帮助器,它从提供的 lambda 中找到方法并进行权限检查,并在其上使用适当的 css 类构建链接

于 2009-09-21T08:09:59.217 回答