ZKEACMS中的权限机制是基于角色的。每个用户可以有多个角色,而每一个角色都可以分配不同的权限。通过组合角色的权限来得到每个用户的具体权限。

权限申明与注册

每一个插件都可以申明自己有哪些权限,每个权限都是一个唯一的KEY,在插件类中申明与注册。

例如,在文章的插件中ArticlePlug.cs,申明了如下权限:

public override IEnumerable<PermissionDescriptor> RegistPermission()
{
yield return new PermissionDescriptor(PermissionKeys.ViewArticle, "文章", "查看文章", "");
yield return new PermissionDescriptor(PermissionKeys.ManageArticle, "文章", "管理文章", "");
yield return new PermissionDescriptor(PermissionKeys.PublishArticle, "文章", "发布文章", "");
yield return new PermissionDescriptor(PermissionKeys.ViewArticleType, "文章", "查看文章类别", "");
yield return new PermissionDescriptor(PermissionKeys.ManageArticleType, "文章", "管理文章类别", "");
}

应用权限

权限申明了以后,就可以在代码里面应用了。

Controller Action

每个Action都可对应一个权限,如只有管理文章权限的用户才能访问到创建文章的Action:

[DefaultAuthorize(Policy = PermissionKeys.ManageArticle)]
public override IActionResult Create()
{
return base.Create();
}

如果越权限访问,则会跳转到禁止访问页面。

在代码里面,也可以通过实例化IAuthorizer对象来判断是否有权限。

View

如果在视图中想隐藏没有权限的按钮或链接,可以使用Authorizer对象的Authorize方法来判断当前用户是否有权限:

@if (Authorizer.Authorize(ZKEACMS.Article.PermissionKeys.ManageArticle))
{
<input type="submit" class="btn btn-primary " value="保存" data-value="@ActionType.Create" />
}