[Abp vNext 源码分析] - 7. 权限与验证 (4)

通过权限组的定义代码你就会知道,现在我们的所有权限都会归属于某个权限组,这一点从之前 Provider 的 IPermissionDefinitionContext 就可以看出来。在权限上下文内部只允许我们通过 AddGroup() 来添加一个权限组,之后再通过权限组的 AddPermission() 方法添加它里面的权限。

权限的定义类叫做 PermissionDefinition,这个类型的构造与权限组定义类似,没有什么好说的。

public class PermissionDefinition { /// <summary> /// 唯一的权限标识名称。 /// </summary> public string Name { get; } /// <summary> /// 当前权限的父级权限,这个属性的值只可以通过 AddChild() 方法进行设置。 /// </summary> public PermissionDefinition Parent { get; private set; } /// <summary> /// 权限的适用范围,默认是租户/租主都适用。 /// 默认值: <see cref="MultiTenancySides.Both"/> /// </summary> public MultiTenancySides MultiTenancySide { get; set; } /// <summary> /// 适用的权限值提供者,这块我们会在后面进行讲解,为空的时候则使用所有的提供者进行校验。 /// </summary> public List<string> Providers { get; } //TODO: Rename to AllowedProviders? // 权限的多语言名称。 public ILocalizableString DisplayName { get => _displayName; set => _displayName = Check.NotNull(value, nameof(value)); } private ILocalizableString _displayName; // 获取权限的子级权限。 public IReadOnlyList<PermissionDefinition> Children => _children.ToImmutableList(); private readonly List<PermissionDefinition> _children; /// <summary> /// 开发人员针对权限的一些自定义属性。 /// </summary> public Dictionary<string, object> Properties { get; } // 针对于自定义属性的快捷索引器。 public object this[string name] { get => Properties.GetOrDefault(name); set => Properties[name] = value; } protected internal PermissionDefinition( [NotNull] string name, ILocalizableString displayName = null, MultiTenancySides multiTenancySide = MultiTenancySides.Both) { Name = Check.NotNull(name, nameof(name)); DisplayName = displayName ?? new FixedLocalizableString(name); MultiTenancySide = multiTenancySide; Properties = new Dictionary<string, object>(); Providers = new List<string>(); _children = new List<PermissionDefinition>(); } public virtual PermissionDefinition AddChild( [NotNull] string name, ILocalizableString displayName = null, MultiTenancySides multiTenancySide = MultiTenancySides.Both) { var child = new PermissionDefinition( name, displayName, multiTenancySide) { Parent = this }; _children.Add(child); return child; } /// <summary> /// 设置指定的自定义属性。 /// </summary> public virtual PermissionDefinition WithProperty(string key, object value) { Properties[key] = value; return this; } /// <summary> /// 添加一组权限值提供者集合。 /// </summary> public virtual PermissionDefinition WithProviders(params string[] providers) { if (!providers.IsNullOrEmpty()) { Providers.AddRange(providers); } return this; } public override string ToString() { return $"[{nameof(PermissionDefinition)} {Name}]"; } } 2.2.3 权限管理器

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzzps.html