private void ReadObjectRolePermissionFromSql(SqlDataReader reader, ObjectRolePermissionsWrapper objectRolePermissionsWrapper) { var obj = ReadRolePermissionFromSql(reader); objectRolePermissionsWrapper.ObjectId = reader["ObjectId"] != DBNull.Value ? (Guid)reader["ObjectId"] : Guid.Empty; objectRolePermissionsWrapper.Type = reader["Type"] != DBNull.Value ? (string)reader["Type"] : string.Empty; objectRolePermissionsWrapper.Fr8AccountId = reader["Fr8AccountId"] != DBNull.Value ? (string)reader["Fr8AccountId"] : string.Empty; objectRolePermissionsWrapper.OrganizationId = reader["OrganizationId"] != DBNull.Value ? (int?)reader["OrganizationId"] : null; //read property name and check for values var propertyName = reader["PropertyName"] != DBNull.Value ? (string)reader["PropertyName"] : string.Empty; if (string.IsNullOrEmpty(propertyName)) { objectRolePermissionsWrapper.RolePermissions.Add(obj); } else { //check if the same property is already added to this list if (objectRolePermissionsWrapper.Properties.ContainsKey(propertyName)) { objectRolePermissionsWrapper.Properties[propertyName].Add(obj); } else { objectRolePermissionsWrapper.Properties[propertyName] = new List <RolePermission> { obj }; } } }
public ObjectRolePermissionsWrapper GetRecordBasedPermissionSetForObject(Guid dataObjectId, string dataObjectType) { using (var connection = OpenConnection(_sqlConnectionProvider)) { using (var command = new SqlCommand()) { command.Connection = connection; const string cmd = @"select rp.Id, orp.PropertyName, orp.ObjectId as ObjectId, orp.Type, anr.Id as roleId, anr.Name as roleName, rp.lastUpdated, rp.createDate, p.Id as PermissionSetId, p.ObjectType, orp.Fr8AccountId, orp.OrganizationId from dbo.RolePermissions rp inner join dbo.PermissionSets p on rp.PermissionSetId = p.Id inner join dbo.ObjectRolePermissions orp on rp.Id = orp.RolePermissionId inner join dbo.AspNetRoles anr on rp.RoleId = anr.Id where orp.ObjectId = @objectId and orp.Type = @objectType "; command.Parameters.AddWithValue("@objectId", dataObjectId); command.Parameters.AddWithValue("@objectType", dataObjectType); command.CommandText = cmd; var result = new ObjectRolePermissionsWrapper(); using (var reader = command.ExecuteReader()) { while (reader.Read()) { ReadObjectRolePermissionFromSql(reader, result); } } //fetch all permissions for ObjectRolePermission Sets foreach (var item in result.RolePermissions) { var selectPermissionSetSql = "select PermissionTypeTemplateId from dbo.PermissionSetPermissions where PermissionSetId = @permissionSetId"; command.Parameters.Clear(); command.Parameters.AddWithValue("@permissionSetId", item.PermissionSet.Id); command.CommandText = selectPermissionSetSql; using (var reader = command.ExecuteReader()) { while (reader.Read()) { //this data is only for internal logic, cannot be saved item.PermissionSet.Permissions.Add(new _PermissionTypeTemplate() { Id = reader["PermissionTypeTemplateId"] != DBNull.Value ? (int)reader["PermissionTypeTemplateId"] : 0 }); } } } return(result); } } }
/// <summary> /// Add new role permissions to list, or update role permissions /// </summary> /// <param name="id"></param> /// <param name="rolePermissions"></param> public void AddOrUpdateRecordBasedPermissionSet(string id, ObjectRolePermissionsWrapper rolePermissions) { lock (_sync) { CachedPermissionSetObject cachedObject; if (!_cachedPermissionSetObjects.TryGetValue(id, out cachedObject)) { var expirOn = _expirationStrategy.NewExpirationToken(); cachedObject = new CachedPermissionSetObject(rolePermissions, expirOn); _cachedPermissionSetObjects.Add(id, cachedObject); } else { var expirOn = _expirationStrategy.NewExpirationToken(); cachedObject = new CachedPermissionSetObject(rolePermissions, expirOn); _cachedPermissionSetObjects[id] = cachedObject; } } }
public CachedPermissionSetObject(ObjectRolePermissionsWrapper rolePermissions, IExpirationToken expiration) { ObjectRolePermissionsWrapper = rolePermissions; Expiration = expiration; }