Class ProjectSentry
ProjectSentry guards Project entities and their component rows. The ProjectSentry applies to the following classes: Project, ProjectRow, ProjectMemberRow, PhoneRow, EmailRow, UrlRow, TextRow, UdefLarge and UdefSmall
Implements
Inherited Members
Namespace: SuperOffice.CRM.Security
Assembly: SoDataBase.dll
Syntax
public class ProjectSentry : RoleRightsSentry<ProjectTableInfo>, ICloneable
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.Examples
ProjectRow p = new ProjectRow.IdxProjectId(1234); TextRow t = new TextRow.IdxTextId( p.TextId ); t.Sentries.Add( p.Sentries );
Constructors
ProjectSentry(ProjectTableInfo)
Create a Project sentry.
Declaration
public ProjectSentry(ProjectTableInfo projectTableInfo)
Parameters
Type | Name | Description |
---|---|---|
ProjectTableInfo | projectTableInfo |
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.ProjectSentry(ProjectTableInfo, ProjectMemberTableInfo)
ProjectSentry guards Project entities and their component rows. The ProjectSentry applies to the following classes: Project, ProjectRow, ProjectMemberRow, PhoneRow, EmailRow, UrlRow, TextRow, UdefLarge and UdefSmall
Declaration
public ProjectSentry(ProjectTableInfo projectTableInfo, ProjectMemberTableInfo projectMemberTableInfo)
Parameters
Type | Name | Description |
---|---|---|
ProjectTableInfo | projectTableInfo | |
ProjectMemberTableInfo | projectMemberTableInfo |
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.Examples
ProjectRow p = new ProjectRow.IdxProjectId(1234); TextRow t = new TextRow.IdxTextId( p.TextId ); t.Sentries.Add( p.Sentries );
ProjectSentry(ProjectTableInfo, ISoDataLookup)
Create a Project sentry for a particular Project row. The row's associate_id will control the user's permissions with respect to this row.
Declaration
public ProjectSentry(ProjectTableInfo projectTableInfo, ISoDataLookup lookup)
Parameters
Type | Name | Description |
---|---|---|
ProjectTableInfo | projectTableInfo | |
ISoDataLookup | lookup |
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.Properties
AssociateId
Project.associate id. Returns the current user's associate-id if not set in the record.
Declaration
public override int AssociateId { get; }
Property Value
Type | Description |
---|---|
int |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.GroupId
Project.group id -- the primary group of the AssociateId at the time the associate was set. Returns the associate's primary group id if not set in the record.
Declaration
public override int GroupId { get; }
Property Value
Type | Description |
---|---|
int |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.IsGhostRow
Returns whether the primary key is a ghost field (i.e., we're looking at a nonexistent record, as opposed to just looking at a new one)
Declaration
public override bool IsGhostRow { get; }
Property Value
Type | Description |
---|---|
bool |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.IsNew
Is the row saved to teh database (persisted primary key == 0)
Declaration
public override bool IsNew { get; }
Property Value
Type | Description |
---|---|
bool |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.MainTable
Return Project table info.
Declaration
protected ProjectTableInfo MainTable { get; }
Property Value
Type | Description |
---|---|
ProjectTableInfo |
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.RegisteredAssociateIdField
The field that holds the associate id of the user first creating the item.
Declaration
public override FieldInfo RegisteredAssociateIdField { get; }
Property Value
Type | Description |
---|---|
FieldInfo |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.RegisteredField
The field that holds information about when the item was first created.
Declaration
public override FieldInfo RegisteredField { get; }
Property Value
Type | Description |
---|---|
FieldInfo |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.RowId
Should return a Project.Project_id
Declaration
public override int RowId { get; }
Property Value
Type | Description |
---|---|
int |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.Methods
ComputeDerivedTableRights()
Empty table copier function. Called after ComputeTableRights but before ComputeFieldRights. Default copy algorithm has been run, so the _tableRights array is fully populated. Gives sub-classes a chance to do their own funky thing. Publish and VisibleFor tables need to be handled
Declaration
protected override void ComputeDerivedTableRights()
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.ComputeFieldRights()
Computes the field rights based on the associate and group info in the row. The sub-class will handle its particular special cases here. This function is called from SuperComputeFieldRights() which does the standard calculations first, then allows this function to add any special restrictions afterwards.
This function computes a map of rights to all fields that can be determined, both on the primary table and any dependent tables. Each field has an entry in the map, which contains a bitwise OR of all rights the current user has to that field. If the user has no update rights to a field, the corresponding GUI control should be read-only. If the user has no Read rights to a field, its value should not be shown at all. In the case of write but not read rights, the sanity of the underlying rules should be questioned.
Declaration
protected override void ComputeFieldRights()
Overrides
Remarks
Place the results of the computation in the _fieldRights member.
ComputeTableRights()
Computes table rights for Project tables.
Declaration
protected override void ComputeTableRights()
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.GetRecordOwnershipIndex()
Permit updates to someone else regardless of permissions for the other party.
Declaration
public override EOwnershipIndex GetRecordOwnershipIndex()
Returns
Type | Description |
---|---|
EOwnershipIndex | Minimum ownership index taking persisted AssociateId into account. |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.GetRowSentry()
Create a copy of the Sentry holding the right instances of table and field infos.
Declaration
public override Sentry GetRowSentry()
Returns
Type | Description |
---|---|
Sentry | New instance of the Sentry. |
Overrides
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.GetTableInfoFromQuery<TargetTableInfo>()
Get tables of the given type from our query
Declaration
protected List<TargetTableInfo> GetTableInfoFromQuery<TargetTableInfo>() where TargetTableInfo : TableInfo
Returns
Type | Description |
---|---|
List<TargetTableInfo> | List of tableinfos of the given type, from the query |
Type Parameters
Name | Description |
---|---|
TargetTableInfo | Type of table to look for |
Remarks
The Project row automatically creates a sentry, because Project is also an RDB Entity. The text row does not create a sentry because it does not know which entity it belongs to, so we have to give it a sentry to use. The text row asks the Project sentry about its permissions.
The Project sentry also answers questions about project-members. A users access to Project Members is controlled by the user's relationship to the owner of the project. The members inherit the project's associate+group values.