using Connected.Data; namespace Connected.Security.Permissions; /// /// Specifies the state of each permission entry. /// public enum PermissionValue { /// /// Permission is not set on the entry. This is a default value /// of each permission entry. /// NotSet = 0, /// /// Evidence does have a claim for the specified resource. /// Allow = 1, /// /// Evidence does not have a claim for the specified resource. /// Deny = 2 } /// /// Represents the permission entry for the specific resource. /// /// /// Environment's assets are protected by . The implementation of each /// policy is based on the which usually provides the Action, /// which can be set to assets. The most common assets are methods. Assets or /// define the which along with Action represents the basics of the permission. /// The implementation contains the logic what claims are needed to perform each action. Additionally, /// policy tipically provides a set of claims on which permissions can be set. Permissions are based on descriptors, which can be /// User, Role or any other registered implementation of the interface. Descriptor provides a set of /// schemas, usually users and roles and that concludes the permission's component model. /// public interface IPermission : IPrimaryKey { /// /// The id of the evidence to which permission is bound to. This is /// typically provided by . /// string Evidence { get; } /// /// The type of the evidence to which permission is bound to. This is /// typically provided by . /// string Schema { get; } /// /// The claim to which permission is bound to. This is typically /// provided by . /// string Claim { get; } /// /// The primary key of the entity. Can be null if permission is not record based. /// string? PrimaryKey { get; } /// /// The entity to which permission is bound to. Can be null if permission is /// environment wide and not bound to a specific entity. /// string? Entity { get; } /// /// The actual value of the permission. /// PermissionValue Value { get; } /// /// The component to which permission is bound to. This is important for advanced /// permission models, for example where admins require the specific permission to be /// set on a specific service method but the policy is shared between many different /// services. /// string? Component { get; } /// /// The component's method for advanced permission models. /// string? Method { get; } }