Merge pull request #508 from pangeachat/lenient-permissions

Lenient permissions
This commit is contained in:
ggurdin 2024-07-25 11:27:42 -04:00 committed by GitHub
commit 53461e2141
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 74 additions and 58 deletions

View file

@ -1,5 +1,4 @@
import 'package:fluffychat/pangea/constants/age_limits.dart';
import 'package:fluffychat/pangea/constants/pangea_event_types.dart';
import 'package:fluffychat/pangea/controllers/base_controller.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
@ -36,63 +35,73 @@ class PermissionsController extends BaseController {
return dob?.isAtLeastYearsOld(AgeLimits.toAccessFeatures) ?? false;
}
/// A user can private chat if
/// 1) they are 18 and outside a class context or
/// 2) they are in a class context and the class rules permit it
/// If no class is passed, uses classController.activeClass
/// A user can private chat if they are 18+
bool canUserPrivateChat({String? roomID}) {
final Room? classContext =
firstRoomWithState(roomID: roomID, type: PangeaEventTypes.rules);
return classContext?.pangeaRoomRules == null
? isUser18()
: classContext!.pangeaRoomRules!.oneToOneChatClass ||
classContext.isRoomAdmin;
return isUser18();
// Rules can't be edited; default to true
// final Room? classContext =
// firstRoomWithState(roomID: roomID, type: PangeaEventTypes.rules);
// return classContext?.pangeaRoomRules == null
// ? isUser18()
// : classContext!.pangeaRoomRules!.oneToOneChatClass ||
// classContext.isRoomAdmin;
}
bool canUserGroupChat({String? roomID}) {
final Room? classContext =
firstRoomWithState(roomID: roomID, type: PangeaEventTypes.rules);
return isUser18();
// Rules can't be edited; default to true
// final Room? classContext =
// firstRoomWithState(roomID: roomID, type: PangeaEventTypes.rules);
return classContext?.pangeaRoomRules == null
? isUser18()
: classContext!.pangeaRoomRules!.isCreateRooms ||
classContext.isRoomAdmin;
// return classContext?.pangeaRoomRules == null
// ? isUser18()
// : classContext!.pangeaRoomRules!.isCreateRooms ||
// classContext.isRoomAdmin;
}
bool showChatInputAddButton(String roomId) {
final PangeaRoomRules? perms = _getRoomRules(roomId);
if (perms == null) return isUser18();
return perms.isShareFiles ||
perms.isShareLocation ||
perms.isSharePhoto ||
perms.isShareVideo;
// Rules can't be edited; default to true
// final PangeaRoomRules? perms = _getRoomRules(roomId);
// if (perms == null) return isUser18();
// return perms.isShareFiles ||
// perms.isShareLocation ||
// perms.isSharePhoto ||
// perms.isShareVideo;
return isUser18();
}
/// works for both roomID of chat and class
bool canShareVideo(String? roomID) =>
_getRoomRules(roomID)?.isShareVideo ?? isUser18();
bool canShareVideo(String? roomID) => isUser18();
// Rules can't be edited; default to true
// _getRoomRules(roomID)?.isShareVideo ?? isUser18();
/// works for both roomID of chat and class
bool canSharePhoto(String? roomID) =>
_getRoomRules(roomID)?.isSharePhoto ?? isUser18();
bool canSharePhoto(String? roomID) => isUser18();
// Rules can't be edited; default to true
// _getRoomRules(roomID)?.isSharePhoto ?? isUser18();
/// works for both roomID of chat and class
bool canShareFile(String? roomID) =>
_getRoomRules(roomID)?.isShareFiles ?? isUser18();
bool canShareFile(String? roomID) => isUser18();
// Rules can't be edited; default to true
// _getRoomRules(roomID)?.isShareFiles ?? isUser18();
/// works for both roomID of chat and class
bool canShareLocation(String? roomID) =>
_getRoomRules(roomID)?.isShareLocation ?? isUser18();
bool canShareLocation(String? roomID) => isUser18();
// Rules can't be edited; default to true
// _getRoomRules(roomID)?.isShareLocation ?? isUser18();
int? classLanguageToolPermission(Room room, ToolSetting setting) =>
room.firstRules?.getToolSettings(setting);
int? classLanguageToolPermission(Room room, ToolSetting setting) => 1;
// Rules can't be edited; default to student choice
// room.firstRules?.getToolSettings(setting);
//what happens if a room isn't in a class?
// what happens if a room isn't in a class?
bool isToolDisabledByClass(ToolSetting setting, Room? room) {
if (room?.isSpaceAdmin ?? false) return false;
final int? classPermission =
room != null ? classLanguageToolPermission(room, setting) : 1;
return classPermission == 0;
return false;
// Rules can't be edited; default to false
// if (room?.isSpaceAdmin ?? false) return false;
// final int? classPermission =
// room != null ? classLanguageToolPermission(room, setting) : 1;
// return classPermission == 0;
}
bool userToolSetting(ToolSetting setting) {
@ -117,18 +126,22 @@ class PermissionsController extends BaseController {
}
bool isToolEnabled(ToolSetting setting, Room? room) {
if (room?.isSpaceAdmin ?? false) {
return userToolSetting(setting);
}
final int? classPermission =
room != null ? classLanguageToolPermission(room, setting) : 1;
if (classPermission == 0) return false;
if (classPermission == 2) return true;
// Rules can't be edited; default to true
return userToolSetting(setting);
// if (room?.isSpaceAdmin ?? false) {
// return userToolSetting(setting);
// }
// final int? classPermission =
// room != null ? classLanguageToolPermission(room, setting) : 1;
// if (classPermission == 0) return false;
// if (classPermission == 2) return true;
// return userToolSetting(setting);
}
bool isWritingAssistanceEnabled(Room? room) {
return isToolEnabled(ToolSetting.interactiveTranslator, room) &&
isToolEnabled(ToolSetting.interactiveGrammar, room);
// Rules can't be edited; default to true
return true;
// return isToolEnabled(ToolSetting.interactiveTranslator, room) &&
// isToolEnabled(ToolSetting.interactiveGrammar, room);
}
}

View file

@ -54,6 +54,7 @@ extension AnalyticsRoomExtension on Room {
return Future.value();
}
// Checks that user has permission to add child to space
if (!canSendEvent(EventTypes.SpaceChild)) return;
if (spaceChildren.any((sc) => sc.roomId == analyticsRoom.id)) return;
@ -103,17 +104,19 @@ extension AnalyticsRoomExtension on Room {
.where((teacher) => !participants.contains(teacher))
.toList();
Future.wait(
uninvitedTeachers.map(
(teacher) => analyticsRoom.invite(teacher.id).catchError((err, s) {
ErrorHandler.logError(
e: err,
m: "Failed to invite teacher ${teacher.id} to analytics room ${analyticsRoom.id}",
s: s,
);
}),
),
);
if (analyticsRoom.canSendEvent(EventTypes.RoomMember)) {
Future.wait(
uninvitedTeachers.map(
(teacher) => analyticsRoom.invite(teacher.id).catchError((err, s) {
ErrorHandler.logError(
e: err,
m: "Failed to invite teacher ${teacher.id} to analytics room ${analyticsRoom.id}",
s: s,
);
}),
),
);
}
}
/// Invite all the user's teachers to 1 analytics room.